(更新:Akabane Jumpei)

・カードデータ読み込み中にエラーが発生した場合、電源ON/OFFを繰り返していたのを修正

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1148 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
(no author) 2008-04-15 11:11:26 +00:00
parent 2df396bc6f
commit 3bdc49eac2

View File

@ -81,6 +81,7 @@ static void SetMCSCR(void);
static BOOL isTwlModeLoad(void); static BOOL isTwlModeLoad(void);
static HotSwState ReadSecureModeCardData(void); static HotSwState ReadSecureModeCardData(void);
static void ClearCaradFlgs(void);
static void GenVA_VB_VD(void); static void GenVA_VB_VD(void);
static HotSwState DecryptObjectFile(void); static HotSwState DecryptObjectFile(void);
@ -1428,7 +1429,8 @@ static void HotSwThread(void *arg)
{ {
#pragma unused( arg ) #pragma unused( arg )
// BOOL isPulledOut = TRUE; static BOOL isReadError = FALSE;
HotSwState retval; HotSwState retval;
HotSwMessage *msg; HotSwMessage *msg;
@ -1450,29 +1452,22 @@ static void HotSwThread(void *arg)
} }
while(1){ while(1){
// 活線挿抜抑制フラグが立っていたら処理しない
if( !SYSMi_GetWork()->flags.hotsw.isEnableHotSW ) { if( !SYSMi_GetWork()->flags.hotsw.isEnableHotSW ) {
SYSMi_GetWork()->flags.hotsw.is1stCardChecked = TRUE; SYSMi_GetWork()->flags.hotsw.is1stCardChecked = TRUE;
OS_PutString("### HotSw is restrained...\n"); OS_PutString("### HotSw is restrained...\n");
break; break;
} }
// カードが挿さってたら
if(HOTSW_IsCardExist()){ if(HOTSW_IsCardExist()){
// 前の状態が挿し
if(!s_IsPulledOut){ if(!s_IsPulledOut){
// 抜きがなかったか判定
if(GetMcSlotMode() == SLOT_STATUS_MODE_10){ if(GetMcSlotMode() == SLOT_STATUS_MODE_10){
// フラグケア
LockHotSwRsc(&SYSMi_GetWork()->lockCardRsc); LockHotSwRsc(&SYSMi_GetWork()->lockCardRsc);
SYSMi_GetWork()->flags.hotsw.isExistCard = TRUE; SYSMi_GetWork()->flags.hotsw.isExistCard = TRUE;
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = TRUE; SYSMi_GetWork()->flags.hotsw.isCardStateChanged = TRUE;
// 新しいカードのIDを入れる
SYSMi_GetWork()->nCardID = s_cbData.id_gam; SYSMi_GetWork()->nCardID = s_cbData.id_gam;
// カードデータロード完了フラグ
SYSMi_GetWork()->flags.hotsw.isCardLoadCompleted = TRUE; SYSMi_GetWork()->flags.hotsw.isCardLoadCompleted = TRUE;
UnlockHotSwRsc(&SYSMi_GetWork()->lockCardRsc); UnlockHotSwRsc(&SYSMi_GetWork()->lockCardRsc);
@ -1483,57 +1478,39 @@ static void HotSwThread(void *arg)
} }
} }
// カード読み込み開始 if(!isReadError){
// [TODO] エラー発生時に電源ON/OFFを繰り返さないため、 retval = LoadCardData();
// 挿入時に一度しかロードしないように必要がある
retval = LoadCardData();
// Debug表示 DebugPrintErrorMessage(retval);
DebugPrintErrorMessage(retval);
// カード読みが失敗していたらカードがないことにする if(retval != HOTSW_SUCCESS){
if(retval != HOTSW_SUCCESS){ McPowerOff();
LockHotSwRsc(&SYSMi_GetWork()->lockHotSW);
SYSMi_GetWork()->flags.hotsw.isExistCard = FALSE;
SYSMi_GetWork()->flags.hotsw.isValidCardBanner = FALSE;
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = TRUE;
UnlockHotSwRsc(&SYSMi_GetWork()->lockHotSW);
// カードブート用構造体の初期化 ClearCaradFlgs();
MI_CpuClear32(&s_cbData, sizeof(CardBootData));
// バッファのクリア isReadError = TRUE;
MI_CpuClearFast(s_pBootSegBuffer, s_BootSegBufSize); }
MI_CpuClearFast(s_pSecureSegBuffer, s_SecureSegBufSize);
MI_CpuClearFast((u32 *)SYSM_CARD_BANNER_BUF, sizeof(TWLBannerFile));
break; s_IsPulledOut = FALSE;
}
else{
break;
} }
// 状態フラグを更新
s_IsPulledOut = FALSE;
} }
// カードが抜けてたら // カードが抜けてたら
else{ else{
// フラグ処理 ClearCaradFlgs();
LockHotSwRsc(&SYSMi_GetWork()->lockHotSW);
SYSMi_GetWork()->flags.hotsw.isExistCard = FALSE;
SYSMi_GetWork()->flags.hotsw.isValidCardBanner = FALSE;
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = TRUE;
SYSMi_GetWork()->flags.hotsw.isCardLoadCompleted = FALSE;
UnlockHotSwRsc(&SYSMi_GetWork()->lockHotSW);
// カードブート用構造体の初期化
MI_CpuClear32(&s_cbData, sizeof(CardBootData)); MI_CpuClear32(&s_cbData, sizeof(CardBootData));
// バッファのクリア
MI_CpuClearFast(s_pBootSegBuffer, s_BootSegBufSize); MI_CpuClearFast(s_pBootSegBuffer, s_BootSegBufSize);
MI_CpuClearFast(s_pSecureSegBuffer, s_SecureSegBufSize); MI_CpuClearFast(s_pSecureSegBuffer, s_SecureSegBufSize);
MI_CpuClearFast((u32 *)SYSM_CARD_BANNER_BUF, sizeof(TWLBannerFile)); MI_CpuClearFast((u32 *)SYSM_CARD_BANNER_BUF, sizeof(TWLBannerFile));
s_IsPulledOut = TRUE; s_IsPulledOut = TRUE;
isReadError = FALSE;
// ワンセグのスリープ時シャットダウン対策を戻す // ワンセグのスリープ時シャットダウン対策を戻す
MCU_EnableDeepSleepToPowerLine( MCU_PWR_LINE_33, TRUE ); MCU_EnableDeepSleepToPowerLine( MCU_PWR_LINE_33, TRUE );
@ -1545,6 +1522,23 @@ static void HotSwThread(void *arg)
} }
/*---------------------------------------------------------------------------*
Name: ClearCaradFlgs
Description:
*---------------------------------------------------------------------------*/
static void ClearCaradFlgs(void)
{
// フラグ処理
LockHotSwRsc(&SYSMi_GetWork()->lockHotSW);
SYSMi_GetWork()->flags.hotsw.isExistCard = FALSE;
SYSMi_GetWork()->flags.hotsw.isValidCardBanner = FALSE;
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = TRUE;
SYSMi_GetWork()->flags.hotsw.isCardLoadCompleted = FALSE;
UnlockHotSwRsc(&SYSMi_GetWork()->lockHotSW);
}
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
[TODO:] Finalize処理の前にやるべきこと [TODO:] Finalize処理の前にやるべきこと
@ -1602,6 +1596,8 @@ static void MonitorThread(void *arg)
// メッセージインデックスをインクリメント // メッセージインデックスをインクリメント
HotSwThreadData.idx_pulledOut = (HotSwThreadData.idx_pulledOut+1) % HOTSW_PULLED_MSG_NUM; HotSwThreadData.idx_pulledOut = (HotSwThreadData.idx_pulledOut+1) % HOTSW_PULLED_MSG_NUM;
OS_PutString(">>> Card State Error : PulledOut\n");
} }
// 本当は挿さっていた場合 // 本当は挿さっていた場合
@ -1615,11 +1611,11 @@ static void MonitorThread(void *arg)
// メッセージインデックスをインクリメント // メッセージインデックスをインクリメント
HotSwThreadData.idx_insert = (HotSwThreadData.idx_insert+1) % HOTSW_INSERT_MSG_NUM; HotSwThreadData.idx_insert = (HotSwThreadData.idx_insert+1) % HOTSW_INSERT_MSG_NUM;
OS_PutString(">>> Card State Error : Insert\n");
} }
(void)OS_RestoreInterrupts( enabled ); (void)OS_RestoreInterrupts( enabled );
OS_PutString(">>> Card State Error\n");
} }
} }
} }