TwlIPL/build/tests/WDSWrapperTest/src/main.c
yoshida_teruhisa 55dcc9029a WDSの更新
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1835 b08762b0-b915-fc4b-9d8c-17b2551a87ff
2008-07-10 02:26:02 +00:00

147 lines
4.4 KiB
C

/*---------------------------------------------------------------------------*
Project: TwlIPL - tests - WDSWrapperTest
File: main.c
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#include <sysmenu/WDSWrapper.h>
// Vブランク関数
static void VBlankIntr(void)
{
OS_SetIrqCheckFlag(OS_IE_V_BLANK);
}
// ヒープ初期化関数
static void InitializeAllocateSystem(void)
{
void *tempLo;
OSHeapHandle hh;
tempLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1);
OS_SetArenaLo(OS_ARENA_MAIN, tempLo);
hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi());
if (hh < 0)
{
OS_Panic("ARM9: Fail to create heap...\n");
}
hh = OS_SetCurrentHeap(OS_ARENA_MAIN, hh);
}
// WDSWrapper用アロケータ
static void *Alloc_WDSWrapper( u32 size )
{
return OS_Alloc( size );
}
static void Free_WDSWrapper( void *ptr )
{
OS_Free( ptr );
}
char *callbackstring[] = {
"WDSWRAPPER_CALLBACK_INITIALIZE",
"WDSWRAPPER_CALLBACK_CLEANUP",
"WDSWRAPPER_CALLBACK_STARTSCAN",
"WDSWRAPPER_CALLBACK_STARTSCAN2",
"WDSWRAPPER_CALLBACK_STOPSCAN",
};
// WDSWrapper用コールバック関数
static void Callback_WDSWrapper( void *ptr )
{
WDSWrapperCallbackParam *callback = (WDSWrapperCallbackParam *)ptr;
OS_TPrintf("Callback_WDSWrapper: %s %d ", callbackstring[callback->callback], callback->errcode );
if( callback->callback == WDSWRAPPER_CALLBACK_STARTSCAN2 ) {
// n秒間隔のビーコン間欠スキャン一回分が完了
// ビーコンを受け取っていないという結果が出た場合、強調表示を消します
if( WDS_WrapperCheckValidBeacon() == WDSWRAPPER_ERRCODE_FAILURE )
OS_TPrintf( "強調表示を消します" );
else {
OS_TPrintf( "強調表示をつけます" );
if( WDS_WrapperSetArgumentParam() == WDSWRAPPER_ERRCODE_SUCCESS )
OS_TPrintf( "\nArgument領域にパラメータを代入\n" );
else
OS_TPrintf( "\nArgument領域にパラメータを代入失敗\n" );
}
}
else if( callback->callback == WDSWRAPPER_CALLBACK_STARTSCAN ) {
// n秒間隔のビーコン間欠スキャン一回分が完了
// ビーコンを受け取っている場合のみ強調表示を付けます
if( WDS_WrapperCheckValidBeacon() == WDSWRAPPER_ERRCODE_SUCCESS )
OS_TPrintf( "強調表示をつけます" );
}
OS_TPrintf( "\n" );
}
void NitroMain(void)
{
WDSWrapperInitializeParam param;
u16 lastpad = 0x0000;
u16 nowpad = 0x0000;
// 各種初期化処理
OS_Init();
OS_InitTick();
OS_InitAlarm();
//---- interrupt setting
OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr);
OS_EnableIrqMask(OS_IE_V_BLANK);
OS_EnableIrq();
GX_VBlankIntr(TRUE);
InitializeAllocateSystem();
OS_TPrintf( "WDSWrapper Sample\n\n" );
OS_TPrintf( "Xボタン: WDSラッパーとWDSを初期化し、間欠スキャンを開始\n" );
OS_TPrintf( "Bボタン: スキャンを中断\n" );
OS_TPrintf( "Aボタン: スキャンを再開\n" );
OS_TPrintf( "Yボタン: スキャンを中断し、WDSラッパーとWDSを解放\n" );
OS_TPrintf( "スタートボタン: ヒープをダンプ表示\n" );
// キー入力で中断・再開・解放をやる
while( 1 ) {
lastpad = nowpad;
nowpad = PAD_Read();
// Aボタン: スキャンを再開
// Bボタン: スキャンを中断
// Xボタン: ラッパーを初期化
// Yボタン: ラッパーを解放
// スタートボタン: ヒープをダンプ表示
if( ( lastpad ^ nowpad ) & PAD_BUTTON_A && !( nowpad & PAD_BUTTON_A ) )
WDS_WrapperStartScan();
if( ( lastpad ^ nowpad ) & PAD_BUTTON_B && !( nowpad & PAD_BUTTON_B ) )
WDS_WrapperStopScan();
if( ( lastpad ^ nowpad ) & PAD_BUTTON_X && !( nowpad & PAD_BUTTON_X ) ) {
// WDSWrapper初期化と動作開始
param.threadprio = 20;
param.dmano = 1;
param.callback = Callback_WDSWrapper;
param.alloc = Alloc_WDSWrapper;
param.free = Free_WDSWrapper;
WDS_WrapperInitialize( param );
}
if( ( lastpad ^ nowpad ) & PAD_BUTTON_Y && !( nowpad & PAD_BUTTON_Y ) )
WDS_WrapperCleanup();
if( ( lastpad ^ nowpad ) & PAD_BUTTON_START && !( nowpad & PAD_BUTTON_START ) )
OS_DumpHeap( OS_ARENA_MAIN, OS_CURRENT_HEAP_HANDLE );
OS_Sleep( 100 );
}
}