From 0cb36d0bced8ac18b21f551459c73329d0d1ef04 Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@b08762b0-b915-fc4b-9d8c-17b2551a87ff> Date: Thu, 16 Oct 2008 04:42:54 +0000 Subject: [PATCH] =?UTF-8?q?(=E6=9B=B4=E6=96=B0=EF=BC=9AAkabane=20Jumpei)?= =?UTF-8?q?=20SYSMi=5FGetWork()->flags.hotsw.isLoadRomEmuOnly=E3=81=8C?= =?UTF-8?q?=E7=AB=8B=E3=81=A3=E3=81=A6=E3=81=84=E3=82=8B=E3=81=A8=E3=81=8D?= =?UTF-8?q?=E3=81=AF=E3=80=81=20MonitorThread=E3=81=AE=E7=94=9F=E6=88=90?= =?UTF-8?q?=E3=83=BB=E8=B5=B7=E5=8B=95=E3=82=92=E8=A1=8C=E3=82=8F=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3=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@2620 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../libraries_sysmenu/hotsw/ARM7/src/hotsw.c | 41 ++++++++++++------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index c0ebec51..5e6d07ed 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -24,6 +24,7 @@ #include <../build/libraries/mb/common/include/mb_fileinfo.h> //#define HOTSW_DISABLE_FORCE_CARD_OFF +//#define HOTSW_CHECK_CREATE_MONITOR_THREAD // カード電源ONからROMヘッダロードまでの期間にスリープに入る時のワンセグ対策しない場合 //#define HOWSW_ENABLE_DEEP_SLEEP_WHILE_INSERT_CARD @@ -275,14 +276,32 @@ void HOTSW_Init(u32 threadPrio) s_PollingLockID = (u16)tempLockID; } - // カードの状態監視用スレッドの生成 ( DSテレビ対策 ) - OS_CreateThread(&HotSwThreadData.monitorThread, - MonitorThread, - NULL, - HotSwThreadData.monitorStack + HOTSW_THREAD_STACK_SIZE / sizeof(u64), - HOTSW_THREAD_STACK_SIZE, - threadPrio - ); + // メッセージキューの初期化 + OS_InitMessageQueue( &HotSwThreadData.hotswQueue, &HotSwThreadData.hotswMsgBuffer[0], HOTSW_MSG_BUFFER_NUM ); + OS_InitMessageQueue( &HotSwThreadData.hotswDmaQueue, &HotSwThreadData.hotswDmaMsgBuffer[0], HOTSW_DMA_MSG_NUM ); + OS_InitMessageQueue( &HotSwThreadData.hotswPollingCtrlQueue, &HotSwThreadData.hotswPollingCtrlBuffer[0], HOTSW_POLLING_CTRL_BUFFER_NUM ); + + // isLoadRomEmuOnlyフラグが立っている時は、LoadCardData関数においてカードの読み込みがNormalモードで終わってしまうため + // MonitorThreadで挿されているかの確認で行っているGameModeのID読みが正常に出来ないため、ID照合で不一致が起こってしまう。 + // それを防ぐために、isLoadRomEmuOnlyフラグが立っているときは、MonitorThreadを生成・起動しないようにする。 + // ※ isLoadRomEmuOnlyフラグはHyenaのMain関数でHOTSW_Initが呼ばれる前に処理されている。 +#ifdef HOTSW_CHECK_CREATE_MONITOR_THREAD + if(!SYSMi_GetWork()->flags.hotsw.isLoadRomEmuOnly){ +#endif + // カードの状態監視用スレッドの生成 ( DSテレビ対策 ) + OS_CreateThread(&HotSwThreadData.monitorThread, + MonitorThread, + NULL, + HotSwThreadData.monitorStack + HOTSW_THREAD_STACK_SIZE / sizeof(u64), + HOTSW_THREAD_STACK_SIZE, + threadPrio + ); + + // スレッド起動 + OS_WakeupThreadDirect(&HotSwThreadData.monitorThread); +#ifdef HOTSW_CHECK_CREATE_MONITOR_THREAD + } +#endif // カードデータロード用スレッドの生成 ※カード状態監視スレッドと優先度同じだけど、後に作成したこっちのスレッドが優先される OS_CreateThread(&HotSwThreadData.hotswThread, @@ -293,14 +312,8 @@ void HOTSW_Init(u32 threadPrio) threadPrio ); - // メッセージキューの初期化 - OS_InitMessageQueue( &HotSwThreadData.hotswQueue, &HotSwThreadData.hotswMsgBuffer[0], HOTSW_MSG_BUFFER_NUM ); - OS_InitMessageQueue( &HotSwThreadData.hotswDmaQueue, &HotSwThreadData.hotswDmaMsgBuffer[0], HOTSW_DMA_MSG_NUM ); - OS_InitMessageQueue( &HotSwThreadData.hotswPollingCtrlQueue, &HotSwThreadData.hotswPollingCtrlBuffer[0], HOTSW_POLLING_CTRL_BUFFER_NUM ); - // スレッド起動 OS_WakeupThreadDirect(&HotSwThreadData.hotswThread); - OS_WakeupThreadDirect(&HotSwThreadData.monitorThread); // バッファの設定 HOTSW_SetBootSegmentBuffer((void *)SYSM_CARD_ROM_HEADER_BAK, SYSM_APP_ROM_HEADER_SIZE );