mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
(更新:Akabane Jumpei)
・スロットのカード挿抜状態とランチャーの挿抜状態がズレ場合にそれを修正するスレッドを追加(新17ピンスロット・DSテレビetc対策) git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1106 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
c74172d664
commit
8b7a32631c
@ -47,9 +47,6 @@ extern "C" {
|
|||||||
#define SECURE_SEGMENT_START 0x4000
|
#define SECURE_SEGMENT_START 0x4000
|
||||||
#define SECURE_SEGMENT_SIZE 0x4000
|
#define SECURE_SEGMENT_SIZE 0x4000
|
||||||
#define SECURE_SEGMENT_END (SECURE_SEGMENT_START + SECURE_SEGMENT_SIZE)
|
#define SECURE_SEGMENT_END (SECURE_SEGMENT_START + SECURE_SEGMENT_SIZE)
|
||||||
#define PNA_BASE_VALUE 0x60e8
|
|
||||||
#define PNB_L_VALUE 0x879b9b05
|
|
||||||
#define PNB_H_VALUE 0x5c
|
|
||||||
|
|
||||||
// --- TWL Card
|
// --- TWL Card
|
||||||
#define TWLCARD_BORDER_OFFSET 0x80000
|
#define TWLCARD_BORDER_OFFSET 0x80000
|
||||||
@ -269,8 +266,6 @@ typedef union BootSegmentData
|
|||||||
|
|
||||||
// カードブート時に必要な変数一式をまとめた構造体
|
// カードブート時に必要な変数一式をまとめた構造体
|
||||||
typedef struct CardBootData{
|
typedef struct CardBootData{
|
||||||
u16 lockID;
|
|
||||||
|
|
||||||
u32 vae;
|
u32 vae;
|
||||||
u32 vbi;
|
u32 vbi;
|
||||||
u32 vd;
|
u32 vd;
|
||||||
@ -309,8 +304,10 @@ typedef struct CardBootData{
|
|||||||
|
|
||||||
// スレッド・メッセージ関係をまとめた構造体
|
// スレッド・メッセージ関係をまとめた構造体
|
||||||
typedef struct CardThreadData{
|
typedef struct CardThreadData{
|
||||||
u64 stack[HOTSW_THREAD_STACK_SIZE / sizeof(u64)];
|
u64 hotswStack[HOTSW_THREAD_STACK_SIZE / sizeof(u64)];
|
||||||
OSThread thread;
|
u64 monitorStack[HOTSW_THREAD_STACK_SIZE / sizeof(u64)];
|
||||||
|
OSThread hotswThread;
|
||||||
|
OSThread monitorThread;
|
||||||
|
|
||||||
u32 idx_insert;
|
u32 idx_insert;
|
||||||
u32 idx_pulledOut;
|
u32 idx_pulledOut;
|
||||||
|
|||||||
@ -32,6 +32,8 @@
|
|||||||
#define CHATTERING_COUNTER 0x1988 // 100ms分 (0x1988 * 15.3us = 100000us)
|
#define CHATTERING_COUNTER 0x1988 // 100ms分 (0x1988 * 15.3us = 100000us)
|
||||||
#define COUNTER_A 0x51C // 20ms分 ( 0x51C * 15.3us = 20012us)
|
#define COUNTER_A 0x51C // 20ms分 ( 0x51C * 15.3us = 20012us)
|
||||||
|
|
||||||
|
#define CARD_EXIST_CHECK_INTERVAL 300
|
||||||
|
|
||||||
#define UNDEF_CODE 0xe7ffdeff // 未定義コード
|
#define UNDEF_CODE 0xe7ffdeff // 未定義コード
|
||||||
#define ENCRYPT_DEF_SIZE 0x800 // 2KB ※ ARM9常駐モジュール先頭2KB
|
#define ENCRYPT_DEF_SIZE 0x800 // 2KB ※ ARM9常駐モジュール先頭2KB
|
||||||
|
|
||||||
@ -71,7 +73,9 @@ static void InterruptCallbackPxi(PXIFifoTag tag, u32 data, BOOL err);
|
|||||||
static void LockHotSwRsc(OSLockWord* word);
|
static void LockHotSwRsc(OSLockWord* word);
|
||||||
static void UnlockHotSwRsc(OSLockWord* word);
|
static void UnlockHotSwRsc(OSLockWord* word);
|
||||||
|
|
||||||
static void McThread(void *arg);
|
static void HotSwThread(void *arg);
|
||||||
|
static void MonitorThread(void *arg);
|
||||||
|
|
||||||
static void McPowerOn(void);
|
static void McPowerOn(void);
|
||||||
static void McPowerOff(void);
|
static void McPowerOff(void);
|
||||||
static void SetMCSCR(void);
|
static void SetMCSCR(void);
|
||||||
@ -112,9 +116,9 @@ static u16 s_bondingOp;
|
|||||||
|
|
||||||
static u32 s_BootSegBufSize, s_SecureSegBufSize, s_Secure2SegBufSize;
|
static u32 s_BootSegBufSize, s_SecureSegBufSize, s_Secure2SegBufSize;
|
||||||
|
|
||||||
static BootSegmentData *s_pBootSegBuffer; // カード抜けてもバッファの場所覚えとく
|
static BootSegmentData *s_pBootSegBuffer;
|
||||||
static u32 *s_pSecureSegBuffer; // カード抜けてもバッファの場所覚えとく
|
static u32 *s_pSecureSegBuffer;
|
||||||
static u32 *s_pSecure2SegBuffer; // カード抜けてもバッファの場所覚えとく
|
static u32 *s_pSecure2SegBuffer;
|
||||||
|
|
||||||
static CardBootData s_cbData;
|
static CardBootData s_cbData;
|
||||||
static SYSMRomEmuInfo s_romEmuInfo;
|
static SYSMRomEmuInfo s_romEmuInfo;
|
||||||
@ -210,7 +214,7 @@ void HOTSW_Init(u32 threadPrio)
|
|||||||
// Bonding Optionの取得
|
// Bonding Optionの取得
|
||||||
s_bondingOp = SCFG_REG_GetBondingOption();
|
s_bondingOp = SCFG_REG_GetBondingOption();
|
||||||
|
|
||||||
// カードブート用構造体の初期化
|
// 構造体の初期化
|
||||||
MI_CpuClear8(&s_cbData, sizeof(CardBootData));
|
MI_CpuClear8(&s_cbData, sizeof(CardBootData));
|
||||||
|
|
||||||
// カードスレッド用構造体の初期化
|
// カードスレッド用構造体の初期化
|
||||||
@ -232,15 +236,25 @@ void HOTSW_Init(u32 threadPrio)
|
|||||||
s_CardLockID = (u16)tempLockID;
|
s_CardLockID = (u16)tempLockID;
|
||||||
}
|
}
|
||||||
|
|
||||||
// カードブート用スレッドの生成
|
// カードデータロード用スレッドの生成
|
||||||
OS_CreateThread(&HotSwThreadData.thread,
|
OS_CreateThread(&HotSwThreadData.hotswThread,
|
||||||
McThread,
|
HotSwThread,
|
||||||
NULL,
|
NULL,
|
||||||
HotSwThreadData.stack + HOTSW_THREAD_STACK_SIZE / sizeof(u64),
|
HotSwThreadData.hotswStack + HOTSW_THREAD_STACK_SIZE / sizeof(u64),
|
||||||
HOTSW_THREAD_STACK_SIZE,
|
HOTSW_THREAD_STACK_SIZE,
|
||||||
threadPrio
|
threadPrio
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// カードの状態監視用スレッドの生成 ( DSテレビ対策 )
|
||||||
|
// [TODO] 優先度の設定
|
||||||
|
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.hotswQueue, &HotSwThreadData.hotswMsgBuffer[0], HOTSW_MSG_BUFFER_NUM );
|
||||||
|
|
||||||
@ -248,8 +262,9 @@ void HOTSW_Init(u32 threadPrio)
|
|||||||
OS_InitMessageQueue( &HotSwThreadData.hotswDmaQueue, &HotSwThreadData.hotswDmaMsgBuffer[0], HOTSW_DMA_MSG_NUM );
|
OS_InitMessageQueue( &HotSwThreadData.hotswDmaQueue, &HotSwThreadData.hotswDmaMsgBuffer[0], HOTSW_DMA_MSG_NUM );
|
||||||
|
|
||||||
// スレッド起動
|
// スレッド起動
|
||||||
OS_WakeupThreadDirect(&HotSwThreadData.thread);
|
OS_WakeupThreadDirect(&HotSwThreadData.hotswThread);
|
||||||
|
OS_WakeupThreadDirect(&HotSwThreadData.monitorThread);
|
||||||
|
|
||||||
// Boot Segment バッファの設定
|
// Boot Segment バッファの設定
|
||||||
HOTSW_SetBootSegmentBuffer((void *)SYSM_CARD_ROM_HEADER_BAK, SYSM_CARD_ROM_HEADER_SIZE );
|
HOTSW_SetBootSegmentBuffer((void *)SYSM_CARD_ROM_HEADER_BAK, SYSM_CARD_ROM_HEADER_SIZE );
|
||||||
|
|
||||||
@ -290,6 +305,8 @@ static HotSwState LoadCardData(void)
|
|||||||
|
|
||||||
start = OS_GetTick();
|
start = OS_GetTick();
|
||||||
|
|
||||||
|
s_isHotSwBusy = TRUE;
|
||||||
|
|
||||||
// カードのロック
|
// カードのロック
|
||||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||||
CARD_LockRom(s_CardLockID);
|
CARD_LockRom(s_CardLockID);
|
||||||
@ -311,6 +328,8 @@ static HotSwState LoadCardData(void)
|
|||||||
|
|
||||||
// ロード処理開始
|
// ロード処理開始
|
||||||
if(HOTSW_IsCardAccessible()){
|
if(HOTSW_IsCardAccessible()){
|
||||||
|
s_cbData.modeType = HOTSW_MODE1;
|
||||||
|
|
||||||
// カード側でKey Tableをロードする
|
// カード側でKey Tableをロードする
|
||||||
state = LoadTable();
|
state = LoadTable();
|
||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||||
@ -550,6 +569,8 @@ end:
|
|||||||
UnlockExCard(s_CardLockID);
|
UnlockExCard(s_CardLockID);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
s_isHotSwBusy = FALSE;
|
||||||
|
|
||||||
// OS_TPrintf( "Load Card Time : %dms\n\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
|
// OS_TPrintf( "Load Card Time : %dms\n\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
@ -897,7 +918,7 @@ static HotSwState CheckCardAuthCode(void)
|
|||||||
|
|
||||||
Description: Boot Segment バッファの指定
|
Description: Boot Segment バッファの指定
|
||||||
|
|
||||||
注:カードブート処理中は呼び出さないようにする
|
注:カードデータロード中は呼び出さないようにする
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void HOTSW_SetBootSegmentBuffer(void* buf, u32 size)
|
void HOTSW_SetBootSegmentBuffer(void* buf, u32 size)
|
||||||
{
|
{
|
||||||
@ -918,7 +939,7 @@ void HOTSW_SetBootSegmentBuffer(void* buf, u32 size)
|
|||||||
|
|
||||||
Description: Secure Segment バッファの指定
|
Description: Secure Segment バッファの指定
|
||||||
|
|
||||||
注:カードブート処理中は呼び出さないようにする
|
注:カードデータロード中は呼び出さないようにする
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void HOTSW_SetSecureSegmentBuffer(ModeType type ,void* buf, u32 size)
|
void HOTSW_SetSecureSegmentBuffer(ModeType type ,void* buf, u32 size)
|
||||||
{
|
{
|
||||||
@ -1147,6 +1168,21 @@ static u32 GetMcSlotMask(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: GetMcSlotMode
|
||||||
|
|
||||||
|
Description: スロットの現在のモードを返す
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
static u32 GetMcSlotMode(void)
|
||||||
|
{
|
||||||
|
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||||
|
return (reg_MI_MC1 & GetMcSlotMask()) >> GetMcSlotShift();
|
||||||
|
#else
|
||||||
|
return (reg_MI_MC1 & GetMcSlotMask()) << GetMcSlotShift();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: SetMcSlotMode
|
Name: SetMcSlotMode
|
||||||
|
|
||||||
@ -1182,21 +1218,6 @@ static BOOL CmpMcSlotMode(u32 mode)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Name: GetMcSlotMode
|
|
||||||
|
|
||||||
Description: スロットの現在のモードを返す
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
static u32 GetMcSlotMode(void)
|
|
||||||
{
|
|
||||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
|
||||||
return (reg_MI_MC1 & GetMcSlotMask()) >> GetMcSlotShift();
|
|
||||||
#else
|
|
||||||
return (reg_MI_MC1 & GetMcSlotMask()) << GetMcSlotShift();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: McPowerOn
|
Name: McPowerOn
|
||||||
|
|
||||||
@ -1216,8 +1237,8 @@ static void McPowerOn(void)
|
|||||||
|
|
||||||
// SCFG_MC1 の Slot Status の M1,M0 を 01 にする
|
// SCFG_MC1 の Slot Status の M1,M0 を 01 にする
|
||||||
SetMcSlotMode(SLOT_STATUS_MODE_01);
|
SetMcSlotMode(SLOT_STATUS_MODE_01);
|
||||||
// 3ms待ち
|
// 10ms待ち
|
||||||
OS_Sleep(3);
|
OS_Sleep(10);
|
||||||
|
|
||||||
// SCFG_MC1 の Slot Status の M1,M0 を 10 にする
|
// SCFG_MC1 の Slot Status の M1,M0 を 10 にする
|
||||||
SetMcSlotMode(SLOT_STATUS_MODE_10);
|
SetMcSlotMode(SLOT_STATUS_MODE_10);
|
||||||
@ -1340,17 +1361,17 @@ static void SetMCSCR(void)
|
|||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: McThread
|
Name: HotSwThread
|
||||||
|
|
||||||
Description: カード抜け・挿し処理スレッド
|
Description: カード抜け・挿し処理スレッド
|
||||||
|
|
||||||
[TODO:]挿抜のフロー・フラグケアetcの確認(今の所、抜き挿ししてもタイトルが更新されない)
|
[TODO:]挿抜のフロー・フラグケアetcの確認(今の所、抜き挿ししてもタイトルが更新されない)
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
static void McThread(void *arg)
|
static void HotSwThread(void *arg)
|
||||||
{
|
{
|
||||||
#pragma unused( arg )
|
#pragma unused( arg )
|
||||||
|
|
||||||
BOOL isPulledOut = TRUE;
|
// BOOL isPulledOut = TRUE;
|
||||||
HotSwState retval;
|
HotSwState retval;
|
||||||
HotSwMessage *msg;
|
HotSwMessage *msg;
|
||||||
|
|
||||||
@ -1379,7 +1400,7 @@ static void McThread(void *arg)
|
|||||||
// カードが挿さってたら
|
// カードが挿さってたら
|
||||||
if(HOTSW_IsCardExist()){
|
if(HOTSW_IsCardExist()){
|
||||||
// 前の状態が挿し
|
// 前の状態が挿し
|
||||||
if(!isPulledOut){
|
if(!s_IsPulledOut){
|
||||||
// 抜きがなかったか判定
|
// 抜きがなかったか判定
|
||||||
if(CmpMcSlotMode(SLOT_STATUS_MODE_10) == TRUE){
|
if(CmpMcSlotMode(SLOT_STATUS_MODE_10) == TRUE){
|
||||||
// フラグケア
|
// フラグケア
|
||||||
@ -1430,11 +1451,12 @@ static void McThread(void *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 状態フラグを更新
|
// 状態フラグを更新
|
||||||
isPulledOut = FALSE;
|
s_IsPulledOut = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// カードが抜けてたら
|
// カードが抜けてたら
|
||||||
else{
|
else{
|
||||||
|
// フラグ処理
|
||||||
LockHotSwRsc(&SYSMi_GetWork()->lockHotSW);
|
LockHotSwRsc(&SYSMi_GetWork()->lockHotSW);
|
||||||
SYSMi_GetWork()->flags.hotsw.isExistCard = FALSE;
|
SYSMi_GetWork()->flags.hotsw.isExistCard = FALSE;
|
||||||
SYSMi_GetWork()->flags.hotsw.isValidCardBanner = FALSE;
|
SYSMi_GetWork()->flags.hotsw.isValidCardBanner = FALSE;
|
||||||
@ -1450,8 +1472,8 @@ static void McThread(void *arg)
|
|||||||
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));
|
||||||
|
|
||||||
isPulledOut = TRUE;
|
s_IsPulledOut = TRUE;
|
||||||
|
|
||||||
// ワンセグのスリープ時シャットダウン対策を戻す
|
// ワンセグのスリープ時シャットダウン対策を戻す
|
||||||
MCU_EnableDeepSleepToPowerLine( MCU_PWR_LINE_33, TRUE );
|
MCU_EnableDeepSleepToPowerLine( MCU_PWR_LINE_33, TRUE );
|
||||||
|
|
||||||
@ -1463,6 +1485,69 @@ static void McThread(void *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: MonitorThread
|
||||||
|
|
||||||
|
Description: 実際のカード状態とHotSwThreadで状態を比べて、違いがあった場合は
|
||||||
|
メッセージを送る
|
||||||
|
|
||||||
|
s_IsPulledOut : True -> カードなし HOTSW_IsCardExist : True -> カードあり
|
||||||
|
False -> カードあり False -> カードなし
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
static void MonitorThread(void *arg)
|
||||||
|
{
|
||||||
|
#pragma unused( arg )
|
||||||
|
|
||||||
|
BOOL isPullOutNow;
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
// カードデータロード中は待機
|
||||||
|
do{
|
||||||
|
OS_Sleep(CARD_EXIST_CHECK_INTERVAL);
|
||||||
|
}
|
||||||
|
while(s_isHotSwBusy);
|
||||||
|
|
||||||
|
// 現在カードが抜けているか
|
||||||
|
isPullOutNow = !HOTSW_IsCardExist();
|
||||||
|
|
||||||
|
// 状態の比較
|
||||||
|
if(s_IsPulledOut != isPullOutNow){
|
||||||
|
OSIntrMode enabled = OS_DisableInterrupts();
|
||||||
|
|
||||||
|
// 本当は抜けてた場合
|
||||||
|
if(isPullOutNow){
|
||||||
|
HotSwThreadData.hotswPulledOutMsg[HotSwThreadData.idx_pulledOut].ctrl = FALSE;
|
||||||
|
HotSwThreadData.hotswPulledOutMsg[HotSwThreadData.idx_pulledOut].value = 0;
|
||||||
|
HotSwThreadData.hotswPulledOutMsg[HotSwThreadData.idx_pulledOut].type = HOTSW_PULLOUT;
|
||||||
|
|
||||||
|
// メッセージをキューの先頭に入れる
|
||||||
|
OS_JamMessage(&HotSwThreadData.hotswQueue, (OSMessage *)&HotSwThreadData.hotswPulledOutMsg[HotSwThreadData.idx_pulledOut], OS_MESSAGE_NOBLOCK);
|
||||||
|
|
||||||
|
// メッセージインデックスをインクリメント
|
||||||
|
HotSwThreadData.idx_pulledOut = (HotSwThreadData.idx_pulledOut+1) % HOTSW_PULLED_MSG_NUM;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 本当は挿さっていた場合
|
||||||
|
else{
|
||||||
|
HotSwThreadData.hotswInsertMsg[HotSwThreadData.idx_insert].ctrl = FALSE;
|
||||||
|
HotSwThreadData.hotswInsertMsg[HotSwThreadData.idx_insert].value = 0;
|
||||||
|
HotSwThreadData.hotswInsertMsg[HotSwThreadData.idx_insert].type = HOTSW_INSERT;
|
||||||
|
|
||||||
|
// メッセージをキューの先頭に入れる
|
||||||
|
OS_JamMessage(&HotSwThreadData.hotswQueue, (OSMessage *)&HotSwThreadData.hotswInsertMsg[HotSwThreadData.idx_insert], OS_MESSAGE_NOBLOCK);
|
||||||
|
|
||||||
|
// メッセージインデックスをインクリメント
|
||||||
|
HotSwThreadData.idx_insert = (HotSwThreadData.idx_insert+1) % HOTSW_INSERT_MSG_NUM;
|
||||||
|
}
|
||||||
|
|
||||||
|
(void)OS_RestoreInterrupts( enabled );
|
||||||
|
|
||||||
|
OS_PutString(">>> Card State Error\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: InterruptCallbackCard
|
Name: InterruptCallbackCard
|
||||||
|
|
||||||
@ -1480,6 +1565,11 @@ static void InterruptCallbackCard(void)
|
|||||||
// メッセージインデックスをインクリメント
|
// メッセージインデックスをインクリメント
|
||||||
HotSwThreadData.idx_pulledOut = (HotSwThreadData.idx_pulledOut+1) % HOTSW_PULLED_MSG_NUM;
|
HotSwThreadData.idx_pulledOut = (HotSwThreadData.idx_pulledOut+1) % HOTSW_PULLED_MSG_NUM;
|
||||||
|
|
||||||
|
/* // スロットのモードを
|
||||||
|
if(GetMcSlotMode() == SLOT_STATUS_MODE_01 || GetMcSlotMode() == SLOT_STATUS_MODE_10){
|
||||||
|
SetMcSlotMode(SLOT_STATUS_MODE_11);
|
||||||
|
}*/
|
||||||
|
|
||||||
OS_PutString("○\n");
|
OS_PutString("○\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user