mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
(更新: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:
parent
2df396bc6f
commit
3bdc49eac2
@ -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");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user