初回のWDS停止は成功。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1864 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
nakasima 2008-07-14 01:06:05 +00:00
parent 6189679100
commit 8e905728d3
4 changed files with 61 additions and 42 deletions

View File

@ -95,12 +95,6 @@ BOOL UTL_IsValidCalibration( u16 x, u16 y, u16 correct_x, u16 correct_y )
//====================================================================== //======================================================================
// スリープ // スリープ
//====================================================================== //======================================================================
static volatile BOOL isWmEnd = FALSE;
static void UTLi_WmCallback( void* )
{
isWmEnd = TRUE;
}
// スリープモードへの遷移 // スリープモードへの遷移
void UTL_GoSleepMode( void ) void UTL_GoSleepMode( void )
@ -114,37 +108,21 @@ void UTL_GoSleepMode( void )
// デバッガ接続中だけはスリープに入らない(蓋閉じでもデバッガが起動するように) // デバッガ接続中だけはスリープに入らない(蓋閉じでもデバッガが起動するように)
if ( !SYSM_IsRunOnDebugger() || (OSi_DetectDebugger() & OS_CONSOLE_TWLDEBUGGER) ) if ( !SYSM_IsRunOnDebugger() || (OSi_DetectDebugger() & OS_CONSOLE_TWLDEBUGGER) )
{ {
// ³<E28093>üâŽ~
isWmEnd = FALSE;
WM_Reset( UTLi_WmCallback );
while (isWmEnd == FALSE)
{
OS_Sleep(1);
}
isWmEnd = FALSE;
WM_End( UTLi_WmCallback );
while (isWmEnd == FALSE)
{
OS_Sleep(1);
}
// カード抜け無検出設定 // カード抜け無検出設定
// TWLではゲームカードの再ロードが可能なため // TWLではゲームカードの再ロードが可能なため
// スリープ時のカード抜け検出を無効化 // スリープ時のカード抜け検出を無効化
// DS-IPLではゲームカードが起動できなくなるので // DS-IPLではゲームカードが起動できなくなるので
// レジューム時のROM-IDチェックでエラーになると // レジューム時のROM-IDチェックでエラーになると
// シャットダウンしていた) // シャットダウンしていた)
{ OSIntrMode enable = OS_DisableInterrupts();
OSIntrMode enable = OS_DisableInterrupts(); reg_MI_MCCNT0 &= ~REG_MI_MCCNT0_I_MASK;
reg_MI_MCCNT0 &= ~REG_MI_MCCNT0_I_MASK; OS_ResetRequestIrqMask( OS_IE_CARD_IREQ );
OS_ResetRequestIrqMask( OS_IE_CARD_IREQ ); OS_RestoreInterrupts( enable );
OS_RestoreInterrupts( enable );
// ƒXƒŠ<C692>[ƒvJˆÚ // スリープ遷移
PM_GoSleepMode( PM_TRIGGER_COVER_OPEN, PM_GoSleepMode( PM_TRIGGER_COVER_OPEN,
0, 0,
0 ); 0 );
}
} }
} }

View File

@ -32,9 +32,6 @@
// extern data----------------------------------------------------------------- // extern data-----------------------------------------------------------------
// define data----------------------------------------------------------------- // define data-----------------------------------------------------------------
#define WDS_THREAD_PRIO 15
#define WDS_DMA_NO 3
#define INIT_DEVICES_LIKE_UIG_LAUNCHER #define INIT_DEVICES_LIKE_UIG_LAUNCHER
#define MEASURE_TIME 1 #define MEASURE_TIME 1
@ -608,13 +605,7 @@ MAIN_LOOP_START:
!LCFG_THW_IsForceDisableWireless() && // 無線強制OFFでない !LCFG_THW_IsForceDisableWireless() && // 無線強制OFFでない
LCFG_TSD_IsAvailableWireless() // 無線ON LCFG_TSD_IsAvailableWireless() // 無線ON
) { ) {
WDSWrapperInitializeParam param; InitializeWDS(); // 初期化と動作開始を兼ねている。(失敗しても止まりはしないので、気にしない)
param.threadprio = WDS_THREAD_PRIO;
param.dmano = WDS_DMA_NO;
param.callback = Callback_WDSWrapper;
param.alloc = SYSM_Alloc;
param.free = SYSM_Free;
(void)WDS_WrapperInitialize( param ); // 初期化と動作開始を兼ねている。(失敗しても止まりはしないので、気にしない)
isStartScanWDS = TRUE; isStartScanWDS = TRUE;
} }
#endif // DISABLE_WDS_SCAN #endif // DISABLE_WDS_SCAN

View File

@ -17,6 +17,9 @@
#include "scanWDS.h" #include "scanWDS.h"
#define WDS_THREAD_PRIO 15
#define WDS_DMA_NO 3
char *callbackstring[] = { char *callbackstring[] = {
"WDSWRAPPER_CALLBACK_INITIALIZE", "WDSWRAPPER_CALLBACK_INITIALIZE",
"WDSWRAPPER_CALLBACK_CLEANUP", "WDSWRAPPER_CALLBACK_CLEANUP",
@ -72,3 +75,47 @@ void Callback_WDSWrapper( void *ptr )
OS_TPrintf( "\n" ); OS_TPrintf( "\n" );
} }
// Sleepコールバック関数
void Callback_WDSPreSleep( void *ptr )
{
#pragma unused( ptr )
WDS_WrapperCleanup();
while ( ! IsClearnupWDSWrapper() )
{
OS_Sleep(1);
}
}
void Callback_WDSPostSleep( void *ptr )
{
#pragma unused( ptr )
InitializeWDS();
}
// 初期化関数
void InitializeWDS( void )
{
static BOOL isInitialized = FALSE;
{
WDSWrapperInitializeParam param;
param.threadprio = WDS_THREAD_PRIO;
param.dmano = WDS_DMA_NO;
param.callback = Callback_WDSWrapper;
param.alloc = SYSM_Alloc;
param.free = SYSM_Free;
(void)WDS_WrapperInitialize( param ); // 初期化と動作開始を兼ねている。(失敗しても止まりはしないので、気にしない)
}
if ( ! isInitialized )
{
static PMSleepCallbackInfo preCbInfo;
static PMSleepCallbackInfo postCbInfo;
PM_SetSleepCallbackInfo( &preCbInfo, Callback_WDSPreSleep, NULL );
PM_PrependPreSleepCallback( &preCbInfo );
PM_SetSleepCallbackInfo( &postCbInfo, Callback_WDSPostSleep, NULL );
PM_AppendPostSleepCallback( &postCbInfo );
}
isInitialized = TRUE;
}

View File

@ -30,8 +30,11 @@ extern "C" {
// global variables-------------------------------------------------- // global variables--------------------------------------------------
// function---------------------------------------------------------- // function----------------------------------------------------------
extern BOOL IsClearnupWDSWrapper( void ); void InitializeWDS( void );
extern void Callback_WDSWrapper( void *ptr ); BOOL IsClearnupWDSWrapper( void );
void Callback_WDSWrapper( void *ptr );
void Callback_WDSPreSleep( void *ptr );
void Callback_WDSPostSleep( void *ptr );
#ifdef __cplusplus #ifdef __cplusplus
} }