Files
Webcam/include/modules/script_squirrel/legacy/wii_binding.cpp

645 lines
17 KiB
C++
Raw Permalink Blame History

/* -----------------------------------------------------------------------------
GSFramework
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */
#if __PLATFORM_NINTENDO_WII__
#include "squirrel_binding.h"
#include "binding_helpers.h"
#include "uc_binding.h"
#include <string.h>
#include <math.h>
#include <Revolution.h>
#include <revolution/kpad.h>
#include <revolution/sc.h>
#include <revolution/arc.h>
#include <revolution/cx.h>
#include <revolution/tmcc/tmcc_jpeg.h>
#include <revolution/sc.h>
#include <revolution/os.h>
#include <revolution/mem/allocator.h>
#include <revolution/wpad.h>
#include "Wii_platform.h"
//---------------------------------------------------------
WIIHome Wii::HomeMenu ATTRIBUTE_ALIGN(32);
nWiiMixer* Wii::Mixer = NULL;
WiiSaveMngr Wii::Save;
nWiiGXRenderer* Wii::Renderer = NULL;
GSFramework* Wii::Engine = NULL;
nProject* Wii::Project = NULL;
WIIWareStrap* Wii::Strap = NULL;
nWiiAllocator Wii::MEM2_allocator;
nIOMemoryFS* Wii::pMemory_fs = NULL;
unsigned int Wii::LastAudioUpdateTime = (u32)OSGetTick();
bool Wii::DisableAudioUpdate = false;
bool Wii::VideoInited = false;
//---------------------------------------------------------
//---------------------------------------------------------
bool Wii::LoadingAudioUpdate()
//---------------------------------------------------------
{
#define WII_LOADING_AUDIO_UPDATE_PERIOD_MS (1000/20)
#define WII_LOADING_AUDIO_UPDATE_SLEEP_MS (2)
if (DisableAudioUpdate)
return;
u32 currentTick = (u32)OSGetTick();
u32 diffCSTime = OSTicksToMilliseconds( OSDiffTick( currentTick, LastAudioUpdateTime ) );
if (diffCSTime >= WII_LOADING_AUDIO_UPDATE_PERIOD_MS)
{
if (Wii::Mixer)
{
Wii::Mixer->Update();
OSSleepMilliseconds( WII_LOADING_AUDIO_UPDATE_SLEEP_MS );
// OSReport("audio updated, delayMs=%d\n",diffCSTime);
}
LastAudioUpdateTime = (u32)OSGetTick();
}
}
//---------------------------------------------------------
void Wii::EnableHomeMenu(bool value)
//---------------------------------------------------------
{
if (value)
WIIHome::enableFlags &= ~WII_HOME_DISABLE_HOME_BUTTON;
else
WIIHome::enableFlags |= WII_HOME_DISABLE_HOME_BUTTON;
}
//---------------------------------------------------------
void Wii::ForceReturnToMenuInsteadOfReset(bool value)
//---------------------------------------------------------
{
WIIHome::forceReturnToMenuInsteadOfReset = value;
}
//---------------------------------------------------------
bool Wii::EnableResetAndPowerButtons(bool enable, bool allowPostpone)
//---------------------------------------------------------
{
u32 f = WII_HOME_DISABLE_RESET_BUTTON | WII_HOME_DISABLE_POWER_BUTTON;
bool res = !(WIIHome::enableFlags & f);
if (!enable && allowPostpone)
f |= WII_HOME_ALLOW_POWER_POSTPONE | WII_HOME_ALLOW_RESET_POSTPONE;
if (enable)
{
WIIHome::enableFlags &= ~f;
WIIHome::enableFlags &= ~WII_HOME_ALLOW_POWER_POSTPONE;
WIIHome::enableFlags &= ~WII_HOME_ALLOW_RESET_POSTPONE;
}
else
WIIHome::enableFlags |= f;
return res;
}
//---------------------------------------------------------
float Wii::GetSquareRatioFor16_9()
//---------------------------------------------------------
{
// cf VI_library_book, page 47
// Game Virtual Space EFB XFB VI
//NTSC, EURGB60 832<33>456 640<34>456 640<34>456 686<38>456
//PAL 832<33>456 640<34>456 640<34>542 682<38>542
if (SCGetAspectRatio()!=SC_ASPECT_RATIO_16x9) {
return(1.0f);
}
else {
if ( (SCGetEuRgb60Mode() == SC_EURGB60_MODE_ON)
|| (VIGetTvFormat() != VI_PAL)) {
return(686.0f/832.0f);
}
else {
return(682.0f/832.0f);
}
}
return (1.0f);
}
//---------------------------------------------------------
SQInteger WiiStartHomeMenu(HSQUIRRELVM vm)
//---------------------------------------------------------
{
if ( !Wii::HomeMenu.IsActivated()
&& ((Wii::HomeMenu.enableFlags & WII_HOME_DISABLE_HOME_BUTTON)==0)) {
Wii::HomeMenu.Init( SCGetAspectRatio()==SC_ASPECT_RATIO_16x9, VIGetTvFormat() );
}
__SQ_RETURN
}
//---------------------------------------------------------
SQInteger WiiEnableHomeMenu(HSQUIRRELVM vm)
//---------------------------------------------------------
{
__SQ_GETSTART(1)
__SQ_GETBOOL(value)
__SQ_GETEND
Wii::EnableHomeMenu(value);
__SQ_RETURN
}
//---------------------------------------------------------
SQInteger WiiGetHomeMenuRunning(HSQUIRRELVM vm)
//---------------------------------------------------------
{
__SQ_RETURNBOOL(Wii::HomeMenu.IsActivated() == 1)
}
//---------------------------------------------------------
SQInteger WiiEnableResetAndPowerButtons(HSQUIRRELVM vm)
//---------------------------------------------------------
{
__SQ_GETSTART(1)
__SQ_GETBOOL(value)
__SQ_GETEND
Wii::EnableResetAndPowerButtons(value);
__SQ_RETURN
}
//---------------------------------------------------------
SQInteger WiiIs16_9(HSQUIRRELVM vm)
//---------------------------------------------------------
{
__SQ_RETURNBOOL(SCGetAspectRatio()==SC_ASPECT_RATIO_16x9)
}
//---------------------------------------------------------
SQInteger WiiGetSquareRatioFor16_9(HSQUIRRELVM vm)
//---------------------------------------------------------
{
__SQ_RETURNFLOAT(Wii::GetSquareRatioFor16_9());
return 1;
}
//---------------------------------------------------------
SQInteger WiiReturnToDataManager(HSQUIRRELVM vm)
//---------------------------------------------------------
{
WIIHome::PowerAndResetPreprocess();
OSReturnToDataManager();
__SQ_RETURN
}
//---------------------------------------------------------
SQInteger WiiInitStrap(HSQUIRRELVM vm)
//---------------------------------------------------------
{
if (Wii::Strap) {
static const GXColor fg = {0x00, 0xff, 0xff, 0xff};
static const GXColor bg = {0x00, 0x00, 0x00, 0x00};
OSFatal ( fg, bg, "WiiInitStrap" );
}
Wii::Strap = new WIIWareStrap();
Wii::Strap->Init();
__SQ_RETURN
}
extern GSFramework *gEngine;
//---------------------------------------------------------
SQInteger WiiDeInitStrap(HSQUIRRELVM vm)
//---------------------------------------------------------
{
if (Wii::Strap) {
Wii::Strap->DeInit();
delete Wii::Strap;
Wii::Strap = NULL;
// a quoi servait ce code d<>ja ???
// VISetBlack(TRUE);
// for (s32 i=0;i<2;i++) {
// gEngine->GetRenderer()->ShowFrame();
// VIWaitForRetrace();
// }
// VISetBlack(FALSE);
// VIWaitForRetrace();
}
__SQ_RETURN
}
//---------------------------------------------------------
SQInteger WiiDrawStrap(HSQUIRRELVM vm)
//---------------------------------------------------------
{
Wii::Strap->Draw();
VIWaitForRetrace();
__SQ_RETURN
}
//---------------------------------------------------------
SQInteger WiiGetVersion(HSQUIRRELVM vm)
//---------------------------------------------------------
{
static const char noe[] = "NOE";
static const char noa[] = "NOA";
__SQ_RETURNSTRING ((WiiErrorMngr::Version == WiiErrorMngr::VERSION_NOE) ? noe : noa);
}
//---------------------------------------------------------
SQInteger WiiGetLastErrorStrId(HSQUIRRELVM vm)
//---------------------------------------------------------
{
__SQ_RETURNSTRING (WiiErrorMngr::GetLastErrorStrId().c_str());
}
//---------------------------------------------------------
SQInteger WiiGetLastErrorText(HSQUIRRELVM vm)
//---------------------------------------------------------
{
__SQ_RETURNSTRING (WiiErrorMngr::GetLastErrorText(WiiErrorMngr::ForcedLocaleForGetLastErrorText).c_str());
}
//---------------------------------------------------------
SQInteger WiiGetOptionText(HSQUIRRELVM vm)
//---------------------------------------------------------
{
__SQ_GETSTART(1)
__SQ_GETSTRING(optionStrID)
const char* res = ((WiiErrorMngr::GetOptionText(optionStrID, WiiErrorMngr::ForcedLocaleForGetLastErrorText)).c_str());
__SQ_GETEND
__SQ_RETURNSTRING(res);
}
//---------------------------------------------------------
SQInteger WiiSetGameTitle(HSQUIRRELVM vm)
//---------------------------------------------------------
{
__SQ_GETSTART(1)
__SQ_GETSTRING(title)
WiiErrorMngr::SetGameTitle(title);
__SQ_GETEND
__SQ_RETURN
}
//---------------------------------------------------------
SQInteger WiiSaveInit(HSQUIRRELVM vm)
//---------------------------------------------------------
{
__SQ_GETSTART(3)
__SQ_GETINT(nbMetafiles)
__SQ_GETINT(saveSizeInBytes)
__SQ_GETINT(saveIconNbPictures)
__SQ_GETEND
WiiSaveMngr::Init(nbMetafiles, saveSizeInBytes, saveIconNbPictures);
__SQ_RETURN
}
//---------------------------------------------------------
SQInteger WiiSaveExists(HSQUIRRELVM vm)
//---------------------------------------------------------
{
__SQ_RETURNBOOL (WiiSaveMngr::SaveFileExists());
}
//---------------------------------------------------------
SQInteger WiiSaveSave(HSQUIRRELVM vm)
//---------------------------------------------------------
{
#ifndef NDEBUG
// #define DEBUG_RESET_WHILE_SAVING
// #define DEBUG_POWER_WHILE_SAVING
#endif
#ifdef DEBUG_RESET_WHILE_SAVING
WIIHome::reset_called = true;
#endif
#ifdef DEBUG_POWER_WHILE_SAVING
WIIHome::power_called = true;
#endif
WiiSaveMngr::Save();
__SQ_RETURN
}
/*
//---------------------------------------------------------
SQInteger WiiSaveLoad(HSQUIRRELVM vm)
//---------------------------------------------------------
{
// WiiSaveMngr::Save();
__SQ_RETURN
}
*/
//---------------------------------------------------------
SQInteger WiiSaveSetMetafile(HSQUIRRELVM vm)
//---------------------------------------------------------
{
__SQ_GETSTART(2)
__SQ_GETSAFEPTR(metafile, nMetaFile, typetag_Metafile)
__SQ_GETINT(id)
WiiSaveMngr::SetMetafile(metafile, id);
__SQ_RETURN
}
//---------------------------------------------------------
SQInteger WiiSaveGetMetafile(HSQUIRRELVM vm)
//---------------------------------------------------------
{
__SQ_GETSTART(1)
__SQ_GETINT(id)
nMetaFile* ptr = WiiSaveMngr::GetMetafile(id);
__SQ_RETURNMANAGEDSAFEPTR(ptr, typetag_Metafile)
__SQ_GETEND
}
//---------------------------------------------------------
SQInteger WiiSaveDelete(HSQUIRRELVM vm)
//---------------------------------------------------------
{
WiiSaveMngr::DeleteSaveFile();
__SQ_RETURN
}
//---------------------------------------------------------
SQInteger WiiGameRestart(HSQUIRRELVM vm)
//---------------------------------------------------------
{
Wii::HomeMenu.PerformReset();
__SQ_RETURN
}
//---------------------------------------------------------
SQInteger WiiDumpMemInfo(HSQUIRRELVM vm)
//---------------------------------------------------------
{
#if __ENABLE_ENGINE_LOG__
u32 freeMem1 = MEMGetTotalFreeSizeForExpHeap(((nWiiAllocator *)MEM1_allocator.vacc)->heap);
OSReport("Mem1 Free = %do, %.2fko, %.2fMo\n", freeMem1, freeMem1/1024.0f, freeMem1/(1024.0f*1024.0f));
u32 freeMem2 = MEMGetTotalFreeSizeForExpHeap(Wii::MEM2_allocator.heap);
OSReport("Mem2 Free = %do, %.2fko, %.2fMo\n", freeMem2, freeMem2/1024.0f, freeMem2/(1024.0f*1024.0f));
#endif
__SQ_RETURN
}
//---------------------------------------------------------
SQInteger WiiRemoteDisconnect(HSQUIRRELVM vm)
//---------------------------------------------------------
{
__SQ_GETSTART(1)
__SQ_GETINT(id)
if (id >= WPAD_CHAN0 && id <= WPAD_CHAN3)
WPADDisconnect(id);
__SQ_RETURN
}
/*
//---------------------------------------------------------
SQInteger WiiSetClearColor(HSQUIRRELVM vm)
//---------------------------------------------------------
{
__SQ_GETSTART(3)
__SQ_GETINT(r)
__SQ_GETINT(g)
__SQ_GETINT(b)
__SQ_GETEND
GXColor c;
c.a = 255;
c.r = r;
c.g = g;
c.b = b;
GXSetCopyClear(c, GX_MAX_Z24);
__SQ_RETURN
}
*/
//-------------------------------------------------------
void RegisterWiiBinding(HSQUIRRELVM vm)
//-------------------------------------------------------
{
/*#
Topic: Wii
Desc: NINTENDO Wii specific binding
#*/
/*#
Section: WiiHome
Desc: Wii Home menu
#*/
/*#
Func: WiiEnableHomeMenu
Proto: void:bool
Desc: Enable or disables the home button.
#*/
sq_register(vm, WiiEnableHomeMenu, "WiiEnableHomeMenu", _SC(".b"));
/*#
Func: WiiGetHomeMenuRunning
Proto: bool:void
Desc: Returns the state of the Home menu.
#*/
sq_register(vm, WiiGetHomeMenuRunning, "WiiGetHomeMenuRunning", _SC("."));
/*#
Func: WiiStartHomeMenu
Proto: void:void
Desc: Launches Home menu (only if it is enabled).
#*/
sq_register(vm, WiiStartHomeMenu, "WiiStartHomeMenu", _SC("."));
/*#
Func: WiiReturnToDataManager
Proto: void:void
Desc: Launches the Home menu (only if it is enabled).
#*/
sq_register(vm, WiiReturnToDataManager, "WiiReturnToDataManager", _SC("."));
/*#
Section: WiiStrap
Desc: Wii strap screen functions
#*/
/*#
Func: WiiInitStrap
Proto: void:void
Desc: Initializes strap screen data.
#*/
sq_register(vm, WiiInitStrap, "WiiInitStrap", _SC("."));
/*#
Func: WiiDeInitStrap
Proto: void:void
Desc: Uninitialize strap screen data.
#*/
sq_register(vm, WiiDeInitStrap, "WiiDeInitStrap", _SC("."));
/*#
Func: WiiDrawStrap
Proto: void:void
Desc: Draws strap screen data.
#*/
sq_register(vm, WiiDrawStrap, "WiiDrawStrap", _SC("."));
/*#
Section: WiiSystem
Desc: Wii system functions
#*/
/*#
Func: WiiEnableResetButton
Proto: void:bool
Desc: Enable or disables the reset/shutdown button.
#*/
sq_register(vm, WiiEnableResetAndPowerButtons, "WiiEnableResetAndPowerButtons", _SC(".b"));
/*#
Func: WiiIs16_9
Proto: bool:void
Desc: Returns true if the Wii system configuration is set to 16/9 mode.
#*/
sq_register(vm, WiiIs16_9, "WiiIs16_9", _SC("."));
/*#
Func: WiiGetSquareRatioFor16_9
Proto: float:void
Desc: Returns the ratio to use to scale 2D images in order to have square pixels on any TV screen.
#*/
sq_register(vm, WiiGetSquareRatioFor16_9, "WiiGetSquareRatioFor16_9", _SC("."));
/*#
Func: WiiGetVersion
Proto: String:void
Desc: Returns "NOE" (Europe) or "NOA" (America).
#*/
sq_register(vm, WiiGetVersion, "WiiGetVersion", _SC("."));
/*#
Func: WiiGetLastErrorStrId
Proto: String:void
Desc: Returns ID of the last error, returns an empty string if none.
#*/
sq_register(vm, WiiGetLastErrorStrId, "WiiGetLastErrorStrId", _SC("."));
/*#
Func: WiiGetLastErrorText
Proto: String:void
Desc: Returns a localized string describing last error.
#*/
sq_register(vm, WiiGetLastErrorText, "WiiGetLastErrorText", _SC("."));
/*#
Func: WiiGetOptionText
Proto: String:String error_id
Desc: Returns a localized string describing a non blocking error option string ID.
#*/
sq_register(vm, WiiGetOptionText, "WiiGetOptionText", _SC(".s"));
/*#
Func: WiiSetGameTitle
Proto: void:String title
Desc: Sets the game title that may be displayed in Wii error screens
#*/
sq_register(vm, WiiSetGameTitle, "WiiSetGameTitle", _SC(".s"));
/*#
Section: WiiSave
Desc: Wii save system functions
#*/
/*#
Func: WiiSaveInit
Proto: void:int nbMetafiles, int saveSizeInBytes, int saveIconNbPictures
Desc: Initialize the Wii save system information (does not perform any read/write to NAND).
#*/
sq_register(vm, WiiSaveInit, "WiiSaveInit", _SC(".iii"));
/*#
Func: WiiSaveExists
Proto: bool:void
Desc: Returns TRUE if save data exists (does not perform any write to NAND).
#*/
sq_register(vm, WiiSaveExists, "WiiSaveExists", _SC("."));
/*#
Func: WiiSaveSave
Proto: void:void
Desc: Saves data to the Wii NAND memory (WiiSaveInit / WiiSaveAddMetafile must have been called before calling this function).
#*/
sq_register(vm, WiiSaveSave, "WiiSaveSave", _SC("."));
/*#
Func: WiiSaveLoad
Proto: void:void
Desc: TBD (WiiSaveInit / WiiSaveSetMetafile must have been called before calling this function).
#*/
// sq_register(vm, WiiSaveLoad, "WiiSaveLoad", _SC("."));
/*#
Func: WiiSaveSetMetafile
Proto: void:Metafile,int id
Desc: TBD
#*/
sq_register(vm, WiiSaveSetMetafile, "WiiSaveSetMetafile", _SC(".xi"));
/*#
Func: WiiSaveGetMetafile
Proto: Metafile:int id
Desc: TBD
#*/
sq_register(vm, WiiSaveGetMetafile, "WiiSaveGetMetafile", _SC(".i"));
/*#
Func: WiiSaveDelete
Proto: void:void
Desc: deletes a game save data & save banner
#*/
sq_register(vm, WiiSaveDelete, "WiiSaveDelete", _SC("."));
/*#
Func: WiiGameRestart
Proto: void:void
Desc: restarts the game (like pressing reset ...)
#*/
sq_register(vm, WiiGameRestart, "WiiGameRestart", _SC("."));
/*
Func: WiiSetClearColor
Proto: void:int r,int g,int b
Desc: changes the wii clear color
*/
//sq_register(vm, WiiSetClearColor, "WiiSetClearColor", _SC(".iii"));
/*#
Func: WiiDumpMemInfo
Proto: void:void
Desc: TBD
#*/
sq_register(vm, WiiDumpMemInfo, "WiiDumpMemInfo", _SC("."));
/*#
Func: WiiRemoteDisconnect
Proto: void:int id
Desc: TBD
#*/
sq_register(vm, WiiRemoteDisconnect, "WiiRemoteDisconnect", _SC(".i"));
}
#endif