From 8e905728d37d52e8384bbfd9b3d000e3120a481d Mon Sep 17 00:00:00 2001 From: nakasima Date: Mon, 14 Jul 2008 01:06:05 +0000 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=9B=9E=E3=81=AEWDS=E5=81=9C?= =?UTF-8?q?=E6=AD=A2=E3=81=AF=E6=88=90=E5=8A=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1864 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- build/libraries_sysmenu/util/ARM9/src/util.c | 38 ++++----------- build/systemMenu_RED/Launcher/ARM9/src/main.c | 11 +---- .../Launcher/ARM9/src/scanWDS.c | 47 +++++++++++++++++++ .../Launcher/ARM9/src/scanWDS.h | 7 ++- 4 files changed, 61 insertions(+), 42 deletions(-) diff --git a/build/libraries_sysmenu/util/ARM9/src/util.c b/build/libraries_sysmenu/util/ARM9/src/util.c index 54e8e8f3..642c590c 100644 --- a/build/libraries_sysmenu/util/ARM9/src/util.c +++ b/build/libraries_sysmenu/util/ARM9/src/util.c @@ -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) ) { - // 無線停止 - 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 ); - // スリープ遷移 - PM_GoSleepMode( PM_TRIGGER_COVER_OPEN, - 0, - 0 ); - } + // スリープ遷移 + PM_GoSleepMode( PM_TRIGGER_COVER_OPEN, + 0, + 0 ); } } diff --git a/build/systemMenu_RED/Launcher/ARM9/src/main.c b/build/systemMenu_RED/Launcher/ARM9/src/main.c index b6a06b2e..32dae584 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/main.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/main.c @@ -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 diff --git a/build/systemMenu_RED/Launcher/ARM9/src/scanWDS.c b/build/systemMenu_RED/Launcher/ARM9/src/scanWDS.c index ec4dc338..0b7e253e 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/scanWDS.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/scanWDS.c @@ -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; +} + diff --git a/build/systemMenu_RED/Launcher/ARM9/src/scanWDS.h b/build/systemMenu_RED/Launcher/ARM9/src/scanWDS.h index 1e6f9b1a..b68d19bb 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/scanWDS.h +++ b/build/systemMenu_RED/Launcher/ARM9/src/scanWDS.h @@ -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 }