初回の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 )
@ -114,37 +108,21 @@ void UTL_GoSleepMode( void )
// デバッガ接続中だけはスリープに入らない(蓋閉じでもデバッガが起動するように)
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ではゲームカードの再ロードが可能なため
// スリープ時のカード抜け検出を無効化
// DS-IPLではゲームカードが起動できなくなるので
// レジューム時のROM-IDチェックでエラーになると
// シャットダウンしていた)
{
OSIntrMode enable = OS_DisableInterrupts();
reg_MI_MCCNT0 &= ~REG_MI_MCCNT0_I_MASK;
OS_ResetRequestIrqMask( OS_IE_CARD_IREQ );
OS_RestoreInterrupts( enable );
OSIntrMode enable = OS_DisableInterrupts();
reg_MI_MCCNT0 &= ~REG_MI_MCCNT0_I_MASK;
OS_ResetRequestIrqMask( OS_IE_CARD_IREQ );
OS_RestoreInterrupts( enable );
// ƒXƒŠ<C692>[ƒvJˆÚ
PM_GoSleepMode( PM_TRIGGER_COVER_OPEN,
0,
0 );
}
// スリープ遷移
PM_GoSleepMode( PM_TRIGGER_COVER_OPEN,
0,
0 );
}
}

View File

@ -32,9 +32,6 @@
// extern data-----------------------------------------------------------------
// define data-----------------------------------------------------------------
#define WDS_THREAD_PRIO 15
#define WDS_DMA_NO 3
#define INIT_DEVICES_LIKE_UIG_LAUNCHER
#define MEASURE_TIME 1
@ -608,13 +605,7 @@ MAIN_LOOP_START:
!LCFG_THW_IsForceDisableWireless() && // 無線強制OFFでない
LCFG_TSD_IsAvailableWireless() // 無線ON
) {
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 ); // 初期化と動作開始を兼ねている。(失敗しても止まりはしないので、気にしない)
InitializeWDS(); // 初期化と動作開始を兼ねている。(失敗しても止まりはしないので、気にしない)
isStartScanWDS = TRUE;
}
#endif // DISABLE_WDS_SCAN

View File

@ -17,6 +17,9 @@
#include "scanWDS.h"
#define WDS_THREAD_PRIO 15
#define WDS_DMA_NO 3
char *callbackstring[] = {
"WDSWRAPPER_CALLBACK_INITIALIZE",
"WDSWRAPPER_CALLBACK_CLEANUP",
@ -72,3 +75,47 @@ void Callback_WDSWrapper( void *ptr )
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--------------------------------------------------
// function----------------------------------------------------------
extern BOOL IsClearnupWDSWrapper( void );
extern void Callback_WDSWrapper( void *ptr );
void InitializeWDS( void );
BOOL IsClearnupWDSWrapper( void );
void Callback_WDSWrapper( void *ptr );
void Callback_WDSPreSleep( void *ptr );
void Callback_WDSPostSleep( void *ptr );
#ifdef __cplusplus
}