TwlSDK変更箇所の補足。

不要なソースの削除。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2915 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
N1277 2010-01-07 01:31:37 +00:00
parent d409f3899d
commit 9c5f32d0c9
5 changed files with 18 additions and 1103 deletions

View File

@ -50,8 +50,6 @@ SRCS = main.c \
child.c \
parent.c \
text.c \
bt.c \
gmain.c
# サンプルの簡略化のため WH モジュールを使用します.

View File

@ -7,4 +7,21 @@
5. NTR の DS ダウンロードメニューへ "CardCopyMultiBoot" リストが出たら選択
6. DS カード→無線→ SD カードの転送が開始する
7.「Sent/Received ROM size=....」という表示が出たら、SD カードの card_dump.sin へ
ゲーム領域の吸出し完了
ゲーム領域の吸出しが完了
【TwlSDK変更箇所】
build/libraries/card/common/src/card_common.c
CARDAccessLevel CARDi_GetAccessLevel(void)
{
.
.
else if (!OS_IsRunOnTwl())
{
level = CARD_ACCESS_LEVEL_FULL; // CARD_ACCESS_LEVEL_BACKUP から変更
}
.
.
return level;
}

View File

@ -1,502 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - MB - demos - cloneboot
File: common.c
Copyright 2006-2008 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 <nitro.h>
#include <nitro/wm.h>
#include <nitro/mb.h>
#include "wh.h"
#include "common.h"
#include "disp.h"
#include "text.h"
#include "bt.h"
static void ModeSelect(void); // 親機/子機 選択画面
static void ModeStartParent(void); // 使用率が低いチャンネルを計算し終えた状態
static void ModeChild(void); // 子機 通信画面
// データ送信時に呼び出される関数
void ParentSendCallback(void);
void ChildSendCallback(void);
static void VBlankIntr(void);
/*
* 使.
*/
static u16 padPress;
static u16 padTrig;
// データ受信時に呼び出される関数
void ParentReceiveCallback(u16 aid, u16 *data, u16 length);
void ChildReceiveCallback(u16 aid, u16 *data, u16 length);
// ブロック転送状態通知関数
void BlockTransferCallback(void *arg);
// 表示用送受信バッファ
static u8 gSendBuf[256] ATTRIBUTE_ALIGN(32);
static BOOL gRecvFlag[1 + WM_NUM_MAX_CHILD];
static int send_counter[16];
static int recv_counter[16];
static BOOL gFirstSendAtChild = TRUE;
TEXT_CTRL *tc[NUM_OF_SCREEN];
static BOOL wbt_available = FALSE;
static u16 connected_bitmap = 0;
/*---------------------------------------------------------------------------*
Name: ReadKey
Description:
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void ReadKey(void)
{
u16 currData = PAD_Read();
padTrig = (u16)(~padPress & currData);
padPress = currData;
}
/*---------------------------------------------------------------------------*
Name: GetPressKey
Description:
Arguments: None
Returns:
*---------------------------------------------------------------------------*/
u16 GetPressKey(void)
{
return padPress;
}
/*---------------------------------------------------------------------------*
Name: GetTrigKey
Description:
Arguments: None
Returns:
*---------------------------------------------------------------------------*/
u16 GetTrigKey(void)
{
return padTrig;
}
/*---------------------------------------------------------------------------*
Name: CommonInit
Description:
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void CommonInit(void)
{
/* OS 初期化 */
OS_Init();
OS_InitTick();
OS_InitAlarm();
FX_Init();
/* GX 初期化 */
GX_Init();
GX_DispOff();
GXS_DispOff();
/* Vブランク割込設定 */
(void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr);
(void)OS_EnableIrqMask(OS_IE_V_BLANK);
(void)OS_EnableIrqMask(OS_IE_FIFO_RECV);
(void)GX_VBlankIntr(TRUE);
// キーを一回空読み
ReadKey();
}
/*---------------------------------------------------------------------------*
Name: InitAllocateSystem
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void InitAllocateSystem(void)
{
void *tempLo;
OSHeapHandle hh;
// OS_Initは呼ばれているという前提
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);
}
/*---------------------------------------------------------------------------*
Name: VBlankIntr
Description:
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
static void VBlankIntr(void)
{
DispVBlankFunc();
//---- 割り込みチェックフラグ
OS_SetIrqCheckFlag(OS_IE_V_BLANK);
}
/*---------------------------------------------------------------------------*
Name: BlockTransferMain
Description:
Arguments: arg - WM
Returns: None.
*---------------------------------------------------------------------------*/
void BlockTransferMain(void)
{
// 通信状態により処理を振り分け
switch (WH_GetSystemState())
{
case WH_SYSSTATE_IDLE:
ModeSelect();
break;
case WH_SYSSTATE_MEASURECHANNEL:
ModeStartParent();
break;
case WH_SYSSTATE_ERROR:
case WH_SYSSTATE_CONNECT_FAIL:
WH_Reset();
break;
case WH_SYSSTATE_FATAL:
break;
case WH_SYSSTATE_SCANNING:
case WH_SYSSTATE_BUSY:
break;
case WH_SYSSTATE_CONNECTED:
// 親機か子機かでさらに分岐する
switch (WH_GetConnectMode())
{
case WH_CONNECTMODE_MP_PARENT:
// ModeParent();
break;
case WH_CONNECTMODE_MP_CHILD:
ModeChild();
break;
}
break;
}
}
/*---------------------------------------------------------------------------*
Name: BlockTransferCallback
Description:
Arguments: arg - WM
Returns: None.
*---------------------------------------------------------------------------*/
void BlockTransferCallback(void *arg)
{
int connectMode = WH_GetConnectMode();
switch (((WMCallback*)arg)->apiid)
{
case WM_APIID_START_MP:
{ /* MP ステート開始 */
WMStartMPCallback *cb = (WMStartMPCallback *)arg;
switch (cb->state)
{
case WM_STATECODE_MP_START:
if (connectMode == WH_CONNECTMODE_MP_PARENT)
{
ParentSendCallback();
}
else if (connectMode == WH_CONNECTMODE_MP_CHILD)
{
WBT_SetOwnAid(WH_GetCurrentAid());
// mfprintf(tc[2], "aid = %d\n", WH_GetCurrentAid());
bt_start();
ChildSendCallback();
}
break;
}
}
break;
case WM_APIID_SET_MP_DATA:
{ /* 単発の MP 通信完了 */
if (connectMode == WH_CONNECTMODE_MP_PARENT)
{
if (connected_bitmap != 0)
{
ParentSendCallback();
}
}
else if (connectMode == WH_CONNECTMODE_MP_CHILD)
{
ChildSendCallback();
}
}
break;
case WM_APIID_START_PARENT:
{ /* 新規の子機接続 */
WMStartParentCallback *cb = (WMStartParentCallback *)arg;
if (connectMode == WH_CONNECTMODE_MP_PARENT)
{
switch (cb->state)
{
case WM_STATECODE_CONNECTED:
if (connected_bitmap == 0)
{
ParentSendCallback();
}
connected_bitmap |= (1 << cb->aid);
break;
case WM_STATECODE_DISCONNECTED:
connected_bitmap &= ~(1 << cb->aid);
break;
}
}
}
break;
}
}
/*---------------------------------------------------------------------------*
Name: ChildSendCallback
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void ChildSendCallback(void)
{
const u16 size = (u16)WBT_MpChildSendHook(gSendBuf, WC_CHILD_DATA_SIZE_MAX);
send_counter[0]++;
(void)WH_SendData(gSendBuf, size, NULL);
}
/*---------------------------------------------------------------------------*
Name: ParentSendCallback
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void ParentSendCallback(void)
{
const u16 size = (u16)WBT_MpParentSendHook(gSendBuf, WC_PARENT_DATA_SIZE_MAX);
send_counter[0]++;
(void)WH_SendData(gSendBuf, size, NULL);
}
/*---------------------------------------------------------------------------*
Name: ParentReceiveCallback
Description:
Arguments: aid - aid
data - (NULL )
length -
Returns: None.
*---------------------------------------------------------------------------*/
void ParentReceiveCallback(u16 aid, u16 *data, u16 length)
{
BgSetMessage(PLTT_YELLOW, " Receive: p=0x%x, len=0x%x", data, length);
recv_counter[aid]++;
if (data != NULL)
{
gRecvFlag[aid] = TRUE;
// コピー元は2バイトアライン(4バイトアラインでない)
// recv_counter[aid]++;
WBT_MpParentRecvHook((u8 *)data, length, aid);
}
else
{
gRecvFlag[aid] = FALSE;
}
}
/*---------------------------------------------------------------------------*
Name: ChildReceiveCallback
Description:
Arguments: aid - aid ( 0)
data - (NULL )
length -
Returns: None.
*---------------------------------------------------------------------------*/
void ChildReceiveCallback(u16 aid, u16 *data, u16 length)
{
BgSetMessage(PLTT_YELLOW, " Receive: p=0x%x, len=0x%x", data, length);
(void)aid;
recv_counter[0]++;
if (data != NULL)
{
gRecvFlag[0] = TRUE;
// コピー元は2バイトアライン(4バイトアラインでない)
WBT_MpChildRecvHook((u8 *)data, length);
}
else
{
gRecvFlag[0] = FALSE;
}
}
/*---------------------------------------------------------------------------*
Name: ModeSelect
Description: /
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static void ModeSelect(void)
{
// カウンタクリア
MI_CpuClear(send_counter, sizeof(send_counter));
MI_CpuClear(recv_counter, sizeof(recv_counter));
gFirstSendAtChild = TRUE;
if (wbt_available)
{
bt_stop();
WBT_End();
wbt_available = FALSE;
}
if (!MB_IsMultiBootChild())
{
BgSetMessage(PLTT_YELLOW, " Connect as PARENT");
//********************************
WBT_InitParent(BT_PARENT_PACKET_SIZE, BT_CHILD_PACKET_SIZE, bt_callback);
WH_SetReceiver(ParentReceiveCallback);
bt_register_blocks();
(void)WH_StartMeasureChannel();
wbt_available = TRUE;
//********************************
}
else
{
static const u8 ANY_PARENT[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
BgSetMessage(PLTT_YELLOW, " Connect as CHILD");
//********************************
WBT_InitChild(bt_callback);
WH_SetReceiver(ChildReceiveCallback);
(void)WH_ChildConnectAuto(WH_CONNECTMODE_MP_CHILD, ANY_PARENT, 0);
wbt_available = TRUE;
//********************************
}
}
/*---------------------------------------------------------------------------*
Name: ModeStartParent
Description: 使
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static void ModeStartParent(void)
{
(void)WH_ParentConnect(WH_CONNECTMODE_MP_PARENT, 0x0000, WH_GetMeasureChannel());
}
/*---------------------------------------------------------------------------*
Name: ModeChild
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static void ModeChild(void)
{
if (gFirstSendAtChild)
{
// 1回目のデータ送信
ChildSendCallback();
gFirstSendAtChild = FALSE;
}
#if 0
if (gKey.trg & PAD_BUTTON_START)
{
//********************************
WH_Finalize();
//********************************
}
else if (gKey.trg & PAD_BUTTON_Y)
{
bt_start();
}
else if (gKey.trg & PAD_BUTTON_X)
{
bt_stop();
}
#endif
}

View File

@ -1,426 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - WBT - demos - wbt-1
File: bt.c
Copyright 2006-2008 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$
*---------------------------------------------------------------------------*/
#ifdef SDK_TWL
#include <twl.h>
#else
#include <nitro.h>
#endif
#include <nitro/wbt.h>
#include "wh.h"
#include "bt.h"
#include "text.h"
#undef mfprintf
#define mfprintf( ... ) ((void)0)
#define NOT_USE_ALLOC
#ifndef SDK_NO_MESSAGE
#define __MY_LINE__ __LINE__
#else
#define __MY_LINE__ 0
#endif
/* 子機用受信ブロック制御データ */
static int request_block_num;
static int block_info_num = 0;
static OSTick start_tick;
static int bt_loop_count = 0;
static int bt_running = 0;
/* 子機用受信用バッファ諸々 */
static WBTBlockInfoTable block_info_table;
static WBTRecvBufTable recv_buf_table;
static WBTPacketBitmapTable recv_buf_packet_bmp_table;
static WBTAidBitmap tbmp = 1; /* リクエスト要求相手(親) */
/* 子機用ユーザーデータ送信バッファ */
static u8 user_data[WBT_SIZE_USER_DATA];
#ifdef NOT_USE_ALLOC
WBTBlockInfo block_info[WBT_NUM_OF_AID][NUM_OF_BT_LIST];
u8 recv_buf[WBT_NUM_OF_AID][BT_DATA_SIZE];
u32
recv_pkt_bmp_buf[WBT_NUM_OF_AID][WBT_PACKET_BITMAP_SIZE(BT_DATA_SIZE, BT_PARENT_PACKET_SIZE)];
#endif
/* 親機用ブロックデータ */
static WBTBlockInfoList bt_list[NUM_OF_BT_LIST];
static u8 bt_data[NUM_OF_BT_LIST][BT_DATA_SIZE];
static u8 user_char_id[NUM_OF_BT_LIST][WBT_USER_ID_LEN] = {
"BT text information area 0",
"BT text information area 1",
"BT text information area 2",
#if 0
"BT text information area 3",
"BT text information area 4"
#endif
};
const char *command_str[] = {
"REQ_NONE",
"REQ_WAIT",
"REQ_SYNC",
"RES_SYNC",
"REQ_GET_BLOCK",
"RES_GET_BLOCK",
"REQ_GET_BLOCKINFO",
"RES_GET_BLOCKINFO",
"REQ_GET_BLOCK_DONE",
"RES_GET_BLOCK_DONE",
"REQ_USER_DATA",
"RES_USER_DATA",
"SYSTEM_CALLBACK",
"PREPARE_SEND_DATA",
"REQ_ERROR",
"RES_ERROR",
"CANCEL"
};
static int strlen(char *str)
{
int i = 0;
while (1)
{
if (*str != '\0')
{
str++;
i++;
}
else
{
break;
}
}
return i;
}
/* 親機用ブロック登録関数 */
void bt_register_blocks(void)
{
int i;
char *end_string = "This is BlockTransfer test data contents end\n";
char *ptr;
int offset;
for (i = 0; i < NUM_OF_BT_LIST; i++)
{
offset = BT_DATA_SIZE - (strlen(end_string) + 1);
*(s32 *)(&(bt_data[i][0])) = offset;
(void)OS_SPrintf((char *)&(bt_data[i][4]),
"This is BlockTransfer test data contents start %d\n", i);
ptr = (char *)(&(bt_data[i][0]) + offset);
(void)OS_SPrintf((char *)ptr, "%s", end_string);
(void)WBT_RegisterBlock(&(bt_list[i]), (u32)(10000 + i) /* id 1000以下は不可 */ ,
user_char_id[i], &(bt_data[i][0]), BT_DATA_SIZE, 0);
}
}
/* 子機用ブロック転送終了関数 */
void bt_stop(void)
{
bt_running = 0;
(void)WBT_CancelCurrentCommand(0xffff);
}
/* 子機用ブロック転送開始関数 */
void bt_start(void)
{
OSIntrMode enabled;
static int init_flag = FALSE;
int i;
enabled = OS_DisableInterrupts();
if (bt_running)
{
(void)OS_RestoreInterrupts(enabled);
return;
}
bt_running = 1;
#ifdef NOT_USE_ALLOC
if (init_flag == FALSE)
{
init_flag = TRUE;
for (i = 0; i < WBT_NUM_OF_AID; i++)
{
block_info_table.block_info[i] = &(block_info[i][0]);
recv_buf_table.recv_buf[i] = &(recv_buf[i][0]);
recv_buf_packet_bmp_table.packet_bitmap[i] = &(recv_pkt_bmp_buf[i][0]);
}
}
#else
mfprintf(tc[2], "child bt start\n");
if (init_flag == FALSE)
{
init_flag = TRUE;
/* 子機用受信用バッファ諸々の初期化 */
for (i = 0; i < WBT_NUM_OF_AID; i++)
{
block_info_table.block_info[i] = NULL;
recv_buf_table.recv_buf[i] = NULL;
recv_buf_packet_bmp_table.packet_bitmap[i] = NULL;
}
}
for (i = 0; i < WBT_NUM_OF_AID; i++)
{
if (block_info_table.block_info[i] != NULL)
{
OS_Free(block_info_table.block_info[i]);
block_info_table.block_info[i] = NULL;
}
if (recv_buf_table.recv_buf[i] != NULL)
{
OS_Free(recv_buf_table.recv_buf[i]);
recv_buf_table.recv_buf[i] = NULL;
}
if (recv_buf_packet_bmp_table.packet_bitmap[i] != NULL)
{
OS_Free(recv_buf_packet_bmp_table.packet_bitmap[i]);
recv_buf_packet_bmp_table.packet_bitmap[i] = NULL;
}
}
#endif
(void)OS_RestoreInterrupts(enabled);
(void)WBT_RequestSync(tbmp, /* Sync要求をする相手親機のみ複数可 */
bt_callback /* 終了時コールバック */
);
}
/* ブロック転送汎用コールバック関数 */
void bt_callback(void *arg)
{
WBTCommand *uc = (WBTCommand *)arg;
int peer_aid = WBT_AidbitmapToAid(uc->peer_bmp); /* 通信相手局のAID */
// mfprintf(tc[2],"aid = %d\n", peer_aid);
switch (uc->event)
{
case WBT_CMD_RES_SYNC:
/* WBT_RequestSync終了 */
request_block_num = 0;
block_info_num = uc->sync.num_of_list; /* 相手の持っているブロック数 */
mfprintf(tc[2], "blockinfo num = %d my_packet_size = %d peer_packet_size = %d\n", block_info_num, uc->sync.my_packet_size, /* 相手の送信データサイズ */
uc->sync.peer_packet_size /* こちらの送信データサイズ */
);
#ifndef NOT_USE_ALLOC
mfprintf(tc[2], "info buf alloc %d\n", peer_aid);
/* ブロック情報テーブルの初期化 */
block_info_table.block_info[peer_aid] = (WBTBlockInfo *)OS_Alloc(sizeof(WBTBlockInfo));
#endif
if (uc->target_bmp == 0) /* すべての相手局からレスポンスがあったか? */
{
(void)OS_SPrintf((char *)user_data, " %5d\n", bt_loop_count);
/* ユーザーデータ送信 */
if (FALSE == WBT_PutUserData(tbmp, /* ユーザーデータを送る相手(親機のみ複数可) */
user_data, /* ユーザーデータバッファ */
WBT_SIZE_USER_DATA, /* ユーザーデータサイズ 12以下 */
bt_callback /* 終了時コールバック */
))
{
mfprintf(tc[2], "command invoke error %d\n", __MY_LINE__);
}
}
break;
case WBT_CMD_RES_USER_DATA:
if (uc->target_bmp == 0) /* すべての相手局からレスポンスがあったか? */
{
/* ブロックリスト要求 */
if (FALSE == WBT_GetBlockInfo(tbmp, /* ブロックリスト要求をする相手(親機のみ複数可) */
request_block_num /* ブロックリストNO */ ,
&block_info_table, /* ブロック情報テーブル */
bt_callback /* 終了時コールバック */
))
{
mfprintf(tc[2], "command invoke error %d\n", __MY_LINE__);
}
}
break;
case WBT_CMD_RES_GET_BLOCKINFO:
/* WBT_GetBlockInfo終了 */
mfprintf(tc[2], "blockinfo %d done\n", uc->get.block_id); /* 取得したブロックリストのID */
mfprintf(tc[2], " info id = %d\n", block_info_table.block_info[peer_aid]->id); /* ブロックID */
mfprintf(tc[2], " info block size = %d\n", block_info_table.block_info[peer_aid]->block_size); /* ブロックのサイズ */
mfprintf(tc[2], " info = %s\n", block_info_table.block_info[peer_aid]->user_id); /* ブロックのユーザ定義情報 */
#ifndef NOT_USE_ALLOC
/* 受信バッファテーブルの初期化 */
recv_buf_table.recv_buf[peer_aid] =
(u8 *)OS_Alloc((u32)block_info_table.block_info[peer_aid]->block_size);
mfprintf(tc[2], "recv buf alloc %d\n", peer_aid);
/* パケット受信番号記録用バッファテーブルの初期化 */
recv_buf_packet_bmp_table.packet_bitmap[peer_aid] =
(u32 *)
OS_Alloc((u32)
WBT_CalcPacketbitmapSize(block_info_table.block_info[peer_aid]->block_size));
mfprintf(tc[2], "recv pkt bmp size = %d\n",
WBT_CalcPacketbitmapSize(block_info_table.block_info[peer_aid]->block_size));
#endif
if (uc->target_bmp == 0) /* すべての相手局からレスポンスがあったか? */
{
/* ブロック受信要求 */
if (FALSE == WBT_GetBlock(tbmp, /* ブロック受信要求をする相手(親機のみ複数可) */
block_info_table.block_info[peer_aid]->id /* ブロックID */ ,
&recv_buf_table, /* 受信バッファテーブル */
(u32)block_info_table.block_info[peer_aid]->block_size, /* ブロックサイズ */
&recv_buf_packet_bmp_table, /* パケット受信番号記録用バッファテーブル */
bt_callback /* 終了時コールバック */
))
{
mfprintf(tc[2], "command invoke error %d\n", __MY_LINE__);
}
else
{
start_tick = OS_GetTick(); /* 時間計測開始 */
}
}
break;
case WBT_CMD_RES_GET_BLOCK:
/* WBT_GetBlock終了 */
mfprintf(tc[2], "get block %d done\n", uc->get.block_id); /* 受信したブロックID */
mfprintf(tc[2], " time %d msec\n", OS_TicksToMilliSeconds(OS_GetTick() - start_tick));
mfprintf(tc[2], " %s\n", &(recv_buf_table.recv_buf[peer_aid][4])); /* 受信したブロックの中身 */
{
u32 offset;
offset = *(u32 *)&(recv_buf_table.recv_buf[peer_aid][0]);
mfprintf(tc[2], " %s\n", (char *)(&(recv_buf_table.recv_buf[peer_aid][offset])));
}
#ifndef NOT_USE_ALLOC
/* 受信バッファテーブルの解放 */
mfprintf(tc[2], "recv buf free %d\n", peer_aid);
OS_Free(recv_buf_table.recv_buf[peer_aid]);
recv_buf_table.recv_buf[peer_aid] = NULL;
/* パケット受信番号記録用バッファテーブルの解放 */
OS_Free(recv_buf_packet_bmp_table.packet_bitmap[peer_aid]);
recv_buf_packet_bmp_table.packet_bitmap[peer_aid] = NULL;
OS_Free(block_info_table.block_info[peer_aid]);
block_info_table.block_info[peer_aid] = NULL;
{
mfprintf(tc[2], "info buf alloc %d\n", peer_aid);
/* ブロック情報テーブルの初期化 */
block_info_table.block_info[peer_aid] = (WBTBlockInfo *)OS_Alloc(sizeof(WBTBlockInfo));
}
#endif
if (uc->target_bmp == 0)
{ /* 要求したすべての相手局からレスポンスがあったか? */
request_block_num++;
if (request_block_num < block_info_num)
{
/* ブロックリスト要求 */
if (FALSE == WBT_GetBlockInfo(tbmp, request_block_num, /* ブロックリストNO */
&block_info_table, /* ブロック情報テーブル */
bt_callback /* 終了時コールバック */
))
{
mfprintf(tc[2], "command invoke error %d\n", __MY_LINE__);
}
}
else
{
request_block_num = 0;
bt_loop_count++;
if (bt_loop_count > 99999)
{
bt_loop_count = 0;
}
(void)OS_SPrintf((char *)user_data, " %05d\n", bt_loop_count);
/* ユーザーデータ送信 */
if (FALSE == WBT_PutUserData(tbmp, /* ユーザーデータを送る相手(親機のみ複数可) */
user_data, /* ユーザーデータバッファ */
WBT_SIZE_USER_DATA, /* ユーザーデータサイズ 12以下 */
bt_callback /* 終了時コールバック */
))
{
mfprintf(tc[2], "command invoke error %d\n", __MY_LINE__);
}
}
}
break;
case WBT_CMD_REQ_NONE:
mfprintf(tc[2], "WBT user none\n");
break;
case WBT_CMD_REQ_USER_DATA:
mfprintf(tc[2], "get user data = %s\n", uc->user_data.data);
break;
case WBT_CMD_REQ_GET_BLOCK_DONE:
mfprintf(tc[2], "get peer getblockdone %d done from %d\n", uc->blockdone.block_id,
peer_aid);
break;
case WBT_CMD_REQ_SYNC:
mfprintf(tc[2], "get peer sync from %d\n", peer_aid);
break;
case WBT_CMD_RES_ERROR:
mfprintf(tc[2], "get req error %d from %d\n", peer_aid, uc->result);
break;
case WBT_CMD_REQ_ERROR:
mfprintf(tc[2], "get res error %d from %d\n", peer_aid, uc->result);
break;
case WBT_CMD_CANCEL:
mfprintf(tc[2], "get canncel [%s] command from %d\n", command_str[uc->command], peer_aid);
break;
default:
mfprintf(tc[2], "WBT callback unknown %d\n", uc->event);
break;
}
}

View File

@ -1,172 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - MB - demos - cloneboot
File: gmain.c
Copyright 2006-2008 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 <nitro.h>
#include "gmain.h"
#include "common.h"
#include "disp.h"
#include "wh.h"
//============================================================================
// 変数定義
//============================================================================
//-----------------------
// データシェアリング用
//-----------------------
static u8 sSendBuf[256] ATTRIBUTE_ALIGN(32); // 送信バッファ( 要32バイトアライン )
static u8 sRecvBuf[256] ATTRIBUTE_ALIGN(32); // 受信バッファ( 要32バイトアライン )
static BOOL sRecvFlag[1 + WM_NUM_MAX_CHILD]; // 受信フラグ
static GShareData *sShareDataPtr;
//-----------------------
// キーシェアリング用
//-----------------------
static WMKeySet sKeySet;
//============================================================================
// 関数定義
//============================================================================
/*---------------------------------------------------------------------------*
Name: GInitDataShare
Description:
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void GInitDataShare(void)
{
sShareDataPtr = (GShareData *) sSendBuf;
DC_FlushRange(sSendBuf, 4);
DC_WaitWriteBufferEmpty();
// KT_Init(KT_KeyEntriesSample);
}
/*---------------------------------------------------------------------------*
Name: GStepDataShare
Description: 1
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void GStepDataShare(s32 frame)
{
sShareDataPtr->count = (u32)frame;
sShareDataPtr->key = GetPressKey();
switch (WH_GetSystemState())
{
//------------------------------
// データシェアリング通信
case WH_SYSSTATE_DATASHARING:
{
u16 i;
u8 *adr;
if (!WH_StepDS(sSendBuf))
{
// データシェア通信失敗
return;
}
for (i = 0; i < 16; ++i)
{
adr = (u8 *)WH_GetSharedDataAdr(i);
if (adr != NULL)
{
MI_CpuCopy8(adr, &(sRecvBuf[i * sizeof(GShareData)]), sizeof(GShareData));
sRecvFlag[i] = TRUE;
}
else
{
sRecvFlag[i] = FALSE;
}
}
}
break;
//------------------------------
// キーシェアリング通信
case WH_SYSSTATE_KEYSHARING:
{
(void)WH_GetKeySet(&sKeySet);
if ((sKeySet.key[0] != 0) || (sKeySet.key[1] != 0))
{
OS_TPrintf("0 -> %04x 1 -> %04x\n", sKeySet.key[0], sKeySet.key[1]);
}
}
}
}
/*---------------------------------------------------------------------------*
Name: GMain
Description:
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void GMain(void)
{
BgPrintStr(4, 3, 0x4, "Send: %04x-%04x", sShareDataPtr->key, sShareDataPtr->count);
BgPutString(4, 5, 0x4, "Receive:");
{
s32 i;
for (i = 0; i < (WM_NUM_MAX_CHILD + 1); i++)
{
if (sRecvFlag[i])
{
GShareData *sd;
sd = (GShareData *) (&(sRecvBuf[i * sizeof(GShareData)]));
BgPrintStr(4, (s16)(6 + i), 0x4,
"Player%02d: %04x-%04x", i, sd->key, sd->count & 0xffff);
}
else
{
BgPutString(4, (s16)(6 + i), 0x7, "No child");
}
}
}
if (IS_PAD_TRIGGER(PAD_BUTTON_START))
{
//********************************
(void)WH_Finalize();
//********************************
}
}