(更新:Akabane Jumpei)

SYSMi_GetWork()->flags.hotsw.isLoadRomEmuOnlyが立っているときは、
MonitorThreadの生成・起動を行わないように修正。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2620 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
(no author) 2008-10-16 04:42:54 +00:00
parent a0db874f5e
commit 0cb36d0bce

View File

@ -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 );