diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index 38fa5c32..2ccd8563 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -1644,9 +1644,14 @@ static void HotSwThread(void *arg) OS_MESSAGE_NOBLOCK); HotSwThreadData.idx_polling = (HotSwThreadData.idx_polling+1) % HOTSW_POLLING_CTRL_BUFFER_NUM; } + else{ + if(msg->finalize == FALSE){ + ClearCardFlgs(); + } + } } - if( msg->finalize == TRUE ) { + if( msg->finalize == TRUE && msg->ctrl == FALSE) { FinalizeHotSw( msg->apli ); } diff --git a/build/libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c b/build/libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c index e2d2f68c..26c63a6d 100644 --- a/build/libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c +++ b/build/libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c @@ -86,7 +86,9 @@ void HOTSW_Init() /*---------------------------------------------------------------------------* Name: HOTSW_EnableHotSWAsync - Description: PXI通信でARM7に活線挿抜有効/無効を通知 + Description: PXI通信でARM7に活線挿抜有効/無効を通知(非同期版) + + ※ 活線挿抜を一時的に抑制する場合はこちらの関数を使ってください。 *---------------------------------------------------------------------------*/ void HOTSW_EnableHotSWAsync( BOOL enable ) { @@ -99,11 +101,10 @@ void HOTSW_EnableHotSWAsync( BOOL enable ) if( SYSMi_GetWork()->flags.hotsw.isEnableHotSW == enable ) { return; } - - msg.msg.value = enable; - msg.msg.ctrl = TRUE; - OS_TPrintf("%s %d\n", __FUNCTION__, __LINE__); + msg.msg.finalize = FALSE; + msg.msg.ctrl = TRUE; + msg.msg.value = enable; while (PXI_SendWordByFifo(PXI_FIFO_TAG_HOTSW, msg.data, FALSE) != PXI_FIFO_SUCCESS) { @@ -112,6 +113,69 @@ void HOTSW_EnableHotSWAsync( BOOL enable ) } +/*---------------------------------------------------------------------------* + Name: HOTSW_EnableHotSWAsync + + Description: PXI通信でARM7に活線挿抜有効/無効を通知(同期版) + + ※ 活線挿抜を一時的に抑制する場合はこちらの関数を使ってください。 + *---------------------------------------------------------------------------*/ +void HOTSW_EnableHotSW( BOOL enable ) +{ + HOTSW_EnableHotSWAsync( enable ); + + while(HOTSW_isEnableHotSW() != enable){ + // do nothing + } +} + + +/*---------------------------------------------------------------------------* + Name: HOTSW_InvalidHotSWAsync + + Description: PXI通信でARM7に活線挿抜無効を通知。(非同期版) + + ※ アプリをブートさせるときに活線挿抜を抑制する場合はこちらの関数を使ってください。 + *---------------------------------------------------------------------------*/ +void HOTSW_InvalidHotSWAsync( void ) +{ + HotSwPxiMessageForArm7 msg; + + MI_CpuClear8( &msg, sizeof(HotSwPxiMessageForArm7)); + + // 現在の値と同じなら何もせずリターン + if( SYSMi_GetWork()->flags.hotsw.isEnableHotSW == FALSE ) { + return; + } + + msg.msg.finalize = TRUE; + msg.msg.ctrl = TRUE; + msg.msg.value = FALSE; + + while (PXI_SendWordByFifo(PXI_FIFO_TAG_HOTSW, msg.data, FALSE) != PXI_FIFO_SUCCESS) + { + // do nothing + } +} + + +/*---------------------------------------------------------------------------* + Name: HOTSW_InvalidHotSW + + Description: PXI通信でARM7に活線挿抜無効を通知。(同期版) + + ※ アプリをブートさせるときに活線挿抜を抑制する場合はこちらの関数を使ってください。 + *---------------------------------------------------------------------------*/ +void HOTSW_InvalidHotSW( void ) +{ + HOTSW_InvalidHotSWAsync(); + + while(HOTSW_isEnableHotSW() != FALSE){ + // do nothing + } +} + + /*---------------------------------------------------------------------------* Name: HOTSW_FinalizeHotSW @@ -124,9 +188,8 @@ void HOTSW_FinalizeHotSWAsync( HotSwApliType apliType ) MI_CpuClear8( &msg, sizeof(HotSwPxiMessageForArm7)); msg.msg.finalize = TRUE; + msg.msg.ctrl = FALSE; msg.msg.bootType = (u8)apliType; - - OS_TPrintf("%s %d\n", __FUNCTION__, __LINE__); while (PXI_SendWordByFifo(PXI_FIFO_TAG_HOTSW, msg.data, FALSE) != PXI_FIFO_SUCCESS) { diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index f3a3cd96..15a9776e 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -832,7 +832,7 @@ void SYSM_StartLoadTitle( TitleProperty *pBootTitle ) #define STACK_SIZE 0xc00 static u64 stack[ STACK_SIZE / sizeof(u64) ]; - HOTSW_EnableHotSWAsync( FALSE ); + HOTSW_InvalidHotSWAsync(); // 値が変化するまでスリープして待つ。 while( HOTSW_isEnableHotSW() != FALSE ) { OS_Sleep( 2 ); diff --git a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c index f8213b0e..b32b4eda 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c @@ -607,7 +607,27 @@ static TitleProperty *ProcessPads( TitleProperty *pTitleList ) } } } - + + // HOTSW許可・抑制テスト + { + static BOOL hotswEnable = TRUE; + + if( pad.trg & PAD_BUTTON_X ){ + hotswEnable ^= TRUE; + + // 活線挿抜許可・抑制 + HOTSW_EnableHotSW(hotswEnable); + + NNS_G2dCharCanvasClearArea( &gCanvas, TXT_COLOR_NULL, 0, 175, 100, 13 ); + } + if(hotswEnable){ + PutStringUTF16( 0, 175, TXT_COLOR_BLUE, L"HotSw Enable" ); + } + else{ + PutStringUTF16( 0, 175, TXT_COLOR_RED, L"HotSw Disable" ); + } + } + return ret; } diff --git a/include/sysmenu/hotsw/common/hotsw.h b/include/sysmenu/hotsw/common/hotsw.h index 8b2c0987..c40833df 100644 --- a/include/sysmenu/hotsw/common/hotsw.h +++ b/include/sysmenu/hotsw/common/hotsw.h @@ -95,9 +95,18 @@ typedef struct HotSwMessageForArm9{ // Function prototype ------------------------------------------------------- // --- ARM9 #ifdef SDK_ARM9 -// PXI通信でARM7に活線挿抜有効/無効を通知 +// PXI通信でARM7に活線挿抜有効/無効を通知。カード関連のフラグ処理も行う(非同期版) void HOTSW_EnableHotSWAsync( BOOL enable ); +// PXI通信でARM7に活線挿抜有効/無効を通知。カード関連のフラグ処理も行う(同期版) +void HOTSW_EnableHotSW( BOOL enable ); + +// PXI通信でARM7に活線挿抜無効を通知。(非同期版) +void HOTSW_InvalidHotSWAsync( void ); + +// PXI通信でARM7に活線挿抜無効を通知。(同期版) +void HOTSW_InvalidHotSW( void ); + // PXI通信でARM7に活線挿抜Finalize処理を通知 void HOTSW_FinalizeHotSWAsync( HotSwApliType apliType );