summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/help_system.c60
-rw-r--r--src/help_system_812B1E0.c423
-rw-r--r--src/librfu_intr.c402
-rw-r--r--src/librfu_rfu.c1712
-rw-r--r--src/librfu_sio32id.c142
-rw-r--r--src/librfu_stwi.c81
-rw-r--r--src/link.c10
-rw-r--r--src/link_rfu.c1413
-rw-r--r--src/link_rfu_2.c716
-rw-r--r--src/link_rfu_3.c189
-rw-r--r--src/party_menu.c4
-rw-r--r--src/rfu_union_tool.c40
-rw-r--r--src/union_room.c470
-rw-r--r--src/union_room_chat.c8
-rw-r--r--src/wireless_communication_status_screen.c4
15 files changed, 3078 insertions, 2596 deletions
diff --git a/src/help_system.c b/src/help_system.c
index 4a4d927c5..bb3135260 100644
--- a/src/help_system.c
+++ b/src/help_system.c
@@ -33,7 +33,7 @@ struct HelpSystemVideoState
static EWRAM_DATA u8 sMapTilesBackup[BG_CHAR_SIZE] = {0};
EWRAM_DATA u8 gUnknown_203F174 = 0;
-EWRAM_DATA u8 gUnknown_203F175 = 0;
+EWRAM_DATA bool8 gHelpSystemToggleWithRButtonDisabled = FALSE;
static EWRAM_DATA u8 sDelayTimer = 0;
static EWRAM_DATA u8 sInHelpSystem = 0;
static EWRAM_DATA struct HelpSystemVideoState sVideoState = {0};
@@ -53,7 +53,7 @@ u8 RunHelpSystemCallback(void)
sInHelpSystem = 0;
if (gSaveBlock2Ptr->optionsButtonMode != OPTIONS_BUTTON_MODE_HELP)
return 0;
- if (JOY_NEW(R_BUTTON) && gUnknown_203F175 == 1)
+ if (JOY_NEW(R_BUTTON) && gHelpSystemToggleWithRButtonDisabled == TRUE)
return 0;
if (JOY_NEW(L_BUTTON | R_BUTTON))
{
@@ -93,9 +93,9 @@ u8 RunHelpSystemCallback(void)
HelpSystem_PrintText_Row61(gString_Help);
sub_813BD14(1);
if (sub_812B40C() == TRUE)
- sub_812BC54(&gHelpSystemListMenu, gHelpSystemListMenuItems);
+ HelpSystemSubroutine_PrintWelcomeMessage(&gHelpSystemListMenu, gHelpSystemListMenuItems);
else
- sub_812BCA8(&gHelpSystemListMenu, gHelpSystemListMenuItems);
+ HelpSystemSubroutine_WelcomeEndGotoMenu(&gHelpSystemListMenu, gHelpSystemListMenuItems);
sub_813BE78(1);
sub_813BF50(1);
CommitTilemap();
@@ -110,7 +110,7 @@ u8 RunHelpSystemCallback(void)
sVideoState.state = 5;
break;
case 5:
- if (!sub_812BB9C(&gHelpSystemListMenu, gHelpSystemListMenuItems))
+ if (!RunHelpMenuSubroutine(&gHelpSystemListMenu, gHelpSystemListMenuItems))
{
PlaySE(SE_HELP_CL);
sVideoState.state = 6;
@@ -981,9 +981,9 @@ void HelpSystem_FillPanel1(void)
void HelpSystem_InitListMenuController(struct HelpSystemListMenu * a0, u8 a1, u8 a2)
{
gHelpSystemListMenu.sub = a0->sub;
- gHelpSystemListMenu.field_0C = a1;
- gHelpSystemListMenu.field_0D = a2;
- gHelpSystemListMenu.field_0E = 0;
+ gHelpSystemListMenu.itemsAbove = a1;
+ gHelpSystemListMenu.cursorPos = a2;
+ gHelpSystemListMenu.state = 0;
if (gHelpSystemListMenu.sub.totalItems < gHelpSystemListMenu.sub.maxShowed)
gHelpSystemListMenu.sub.maxShowed = gHelpSystemListMenu.sub.totalItems;
sub_813BDA4(0);
@@ -1007,7 +1007,7 @@ s32 HelpSystem_GetMenuInput(void)
else if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- return gHelpSystemListMenu.sub.items[gHelpSystemListMenu.field_0C + gHelpSystemListMenu.field_0D].index;
+ return gHelpSystemListMenu.sub.items[gHelpSystemListMenu.itemsAbove + gHelpSystemListMenu.cursorPos].index;
}
else if (JOY_NEW(B_BUTTON))
{
@@ -1051,15 +1051,15 @@ void sub_813C75C(void)
u8 r6 = gHelpSystemListMenu.sub.totalItems - 7;
if (gHelpSystemListMenu.sub.totalItems > 7)
{
- s32 r4 = gHelpSystemListMenu.field_0C + gHelpSystemListMenu.field_0D;
+ s32 r4 = gHelpSystemListMenu.itemsAbove + gHelpSystemListMenu.cursorPos;
sub_813C004(0, 0);
if (r4 == 0)
sub_813C004(1, 1);
- else if (gHelpSystemListMenu.field_0C == 0 && gHelpSystemListMenu.field_0D != 0)
+ else if (gHelpSystemListMenu.itemsAbove == 0 && gHelpSystemListMenu.cursorPos != 0)
sub_813C004(1, 1);
- else if (gHelpSystemListMenu.field_0C == r6)
+ else if (gHelpSystemListMenu.itemsAbove == r6)
sub_813C004(0, 1);
- else if (gHelpSystemListMenu.field_0C != 0)
+ else if (gHelpSystemListMenu.itemsAbove != 0)
{
sub_813C004(0, 1);
sub_813C004(1, 1);
@@ -1071,7 +1071,7 @@ void PrintListMenuItems(void)
{
u8 glyphHeight = GetFontAttribute(2, 1) + 1;
s32 i;
- s32 r5 = gHelpSystemListMenu.field_0C;
+ s32 r5 = gHelpSystemListMenu.itemsAbove;
for (i = 0; i < gHelpSystemListMenu.sub.maxShowed; i++)
{
@@ -1086,7 +1086,7 @@ void PlaceListMenuCursor(void)
{
u8 glyphHeight = GetFontAttribute(2, 1) + 1;
u8 x = gHelpSystemListMenu.sub.left;
- u8 y = gHelpSystemListMenu.sub.top + glyphHeight * gHelpSystemListMenu.field_0D;
+ u8 y = gHelpSystemListMenu.sub.top + glyphHeight * gHelpSystemListMenu.cursorPos;
HelpSystem_PrintTextAt(gFameCheckerText_ListMenuCursor, x, y);
}
@@ -1107,24 +1107,24 @@ u8 TryMoveCursor1(u8 dirn)
r4 = 0;
else
r4 = gHelpSystemListMenu.sub.maxShowed - (gHelpSystemListMenu.sub.maxShowed / 2 + (gHelpSystemListMenu.sub.maxShowed & 1)) - 1;
- if (gHelpSystemListMenu.field_0C == 0)
+ if (gHelpSystemListMenu.itemsAbove == 0)
{
- if (gHelpSystemListMenu.field_0D != 0)
+ if (gHelpSystemListMenu.cursorPos != 0)
{
- gHelpSystemListMenu.field_0D--;
+ gHelpSystemListMenu.cursorPos--;
return 1;
}
else
return 0;
}
- if (gHelpSystemListMenu.field_0D > r4)
+ if (gHelpSystemListMenu.cursorPos > r4)
{
- gHelpSystemListMenu.field_0D--;
+ gHelpSystemListMenu.cursorPos--;
return 1;
}
else
{
- gHelpSystemListMenu.field_0C--;
+ gHelpSystemListMenu.itemsAbove--;
return 2;
}
}
@@ -1134,24 +1134,24 @@ u8 TryMoveCursor1(u8 dirn)
r4 = 0;
else
r4 = gHelpSystemListMenu.sub.maxShowed / 2 + (gHelpSystemListMenu.sub.maxShowed & 1);
- if (gHelpSystemListMenu.field_0C == gHelpSystemListMenu.sub.totalItems - gHelpSystemListMenu.sub.maxShowed)
+ if (gHelpSystemListMenu.itemsAbove == gHelpSystemListMenu.sub.totalItems - gHelpSystemListMenu.sub.maxShowed)
{
- if (gHelpSystemListMenu.field_0D < gHelpSystemListMenu.sub.maxShowed - 1)
+ if (gHelpSystemListMenu.cursorPos < gHelpSystemListMenu.sub.maxShowed - 1)
{
- gHelpSystemListMenu.field_0D++;
+ gHelpSystemListMenu.cursorPos++;
return 1;
}
else
return 0;
}
- else if (gHelpSystemListMenu.field_0D < r4)
+ else if (gHelpSystemListMenu.cursorPos < r4)
{
- gHelpSystemListMenu.field_0D++;
+ gHelpSystemListMenu.cursorPos++;
return 1;
}
else
{
- gHelpSystemListMenu.field_0C++;
+ gHelpSystemListMenu.itemsAbove++;
return 2;
}
}
@@ -1159,7 +1159,7 @@ u8 TryMoveCursor1(u8 dirn)
bool8 MoveCursor(u8 by, u8 dirn)
{
- u8 r7 = gHelpSystemListMenu.field_0D;
+ u8 r7 = gHelpSystemListMenu.cursorPos;
u8 flags = 0;
s32 i;
for (i = 0; i < by; i++)
@@ -1172,14 +1172,14 @@ bool8 MoveCursor(u8 by, u8 dirn)
// neither changed
return TRUE;
case 1:
- // changed field_0D only
+ // changed cursorPos only
sub_813C860(r7);
PlaceListMenuCursor();
CommitTilemap();
break;
case 2:
case 3:
- // changed field_0C
+ // changed itemsAbove
if (sub_812BF88() == TRUE)
{
HelpSystem_SetInputDelay(2);
diff --git a/src/help_system_812B1E0.c b/src/help_system_812B1E0.c
index df892152a..5b634a273 100644
--- a/src/help_system_812B1E0.c
+++ b/src/help_system_812B1E0.c
@@ -19,22 +19,22 @@
static EWRAM_DATA u16 sSomeVariable = 0;
static EWRAM_DATA u8 gUnknown_203B0EE = 0;
-u8 gUnknown_3005E9C[4];
+u8 sHelpSystemState[4];
u16 gSomeVariableBackup;
static bool32 IsCurrentMapInArray(const u16 * mapIdxs);
-static void sub_812B520(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-static void sub_812B614(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-static bool8 sub_812B754(void);
-static bool8 sub_812B780(u8);
-static bool8 sub_812BB10(void);
-
-static void sub_812BF5C(void);
-static void sub_812BF74(const u8 *);
-static void sub_812BF94(struct HelpSystemListMenu * a0);
-static void sub_812BF9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-
-static const u8 *const gUnknown_845B080[] = {
+static void BuildMainTopicsListAndMoveToH00(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+static void SetHelpSystemSubmenuItems(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+static bool8 HelpSystem_HasDefeatedBrock(void);
+static bool8 HelpSystemSubmenuIndexIsActive(u8);
+static bool8 HasGottenAtLeastOneHM(void);
+
+static void PrintWelcomeMessageOnPanel1(void);
+static void PrintTextOnPanel2Row52RightAlign(const u8 *);
+static void ResetHelpSystemCursor(struct HelpSystemListMenu * a0);
+static void PrintHelpSystemTopicMouseoverDescription(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+
+static const u8 *const sHelpSystemTopicPtrs[] = {
gUnknown_81B2DF8,
gUnknown_81B2E1C,
gUnknown_81B2E2E,
@@ -43,7 +43,7 @@ static const u8 *const gUnknown_845B080[] = {
gUnknown_81B2E6A
};
-static const u8 *const gUnknown_845B098[] = {
+static const u8 *const sHelpSystemTopicMouseoverDescriptionPtrs[] = {
gUnknown_81B2E88,
gUnknown_81B2EC8,
gUnknown_81B2F00,
@@ -52,7 +52,7 @@ static const u8 *const gUnknown_845B098[] = {
gUnknown_81B2FA9
};
-static const u8 *const gUnknown_845B0B0[] = {
+static const u8 *const sHelpSystemSpecializedQuestionTextPtrs[] = {
NULL,
gUnknown_81B3083,
gUnknown_81B30A9,
@@ -100,7 +100,7 @@ static const u8 *const gUnknown_845B0B0[] = {
gUnknown_81B3516
};
-static const u8 *const gUnknown_845B164[] = {
+static const u8 *const sHelpSystemSpecializedAnswerTextPtrs[] = {
NULL,
gUnknown_81B3525,
gUnknown_81B35E6,
@@ -148,7 +148,7 @@ static const u8 *const gUnknown_845B164[] = {
gUnknown_81B55F4
};
-static const u8 *const gUnknown_845B218[] = {
+static const u8 *const sHelpSystemMenuTopicTextPtrs[] = {
NULL,
gUnknown_81B56E3,
gUnknown_81B56F4,
@@ -200,7 +200,7 @@ static const u8 *const gUnknown_845B218[] = {
gUnknown_81B5A37
};
-static const u8 *const gUnknown_845B2DC[] = {
+static const u8 *const sHelpSystemSpecializedControlsTextPtrs[] = {
NULL,
gUnknown_81B5A4D,
gUnknown_81B5B0C,
@@ -252,7 +252,7 @@ static const u8 *const gUnknown_845B2DC[] = {
gUnknown_81B7C57
};
-static const u8 *const gUnknown_845B3A0[] = {
+static const u8 *const sHelpSystemSpecializedStringsTextPtrs[] = {
NULL,
gUnknown_81B7CC1,
gUnknown_81B7CC4,
@@ -299,7 +299,7 @@ static const u8 *const gUnknown_845B3A0[] = {
gUnknown_81B7E0F
};
-static const u8 *const gUnknown_845B450[] = {
+static const u8 *const sHelpSystemSpecializedStringDefinitionsTextPtrs[] = {
NULL,
gUnknown_81B7E16,
gUnknown_81B7F0A,
@@ -346,7 +346,7 @@ static const u8 *const gUnknown_845B450[] = {
gUnknown_81B9B2F
};
-static const u8 *const gUnknown_845B500[] = {
+static const u8 *const sHelpSystemGeneralTopicTextPtrs[] = {
NULL,
gUnknown_81B9BB7,
gUnknown_81B9BC7,
@@ -357,7 +357,7 @@ static const u8 *const gUnknown_845B500[] = {
gUnknown_81B9C1D
};
-static const u8 *const gUnknown_845B520[] = {
+static const u8 *const sHelpSystemGeneralTopicDescriptionTextPtrs[] = {
NULL,
gUnknown_81B9C2F,
gUnknown_81B9D04,
@@ -368,7 +368,7 @@ static const u8 *const gUnknown_845B520[] = {
gUnknown_81BA027
};
-static const u8 *const gUnknown_845B540[] = {
+static const u8 *const sHelpSystemTypeMatchupTextPtrs[] = {
NULL,
gUnknown_81BA0F1,
gUnknown_81BA10D,
@@ -407,7 +407,7 @@ static const u8 *const gUnknown_845B540[] = {
gUnknown_81BA400
};
-static const u8 *const gUnknown_845B5D0[] = {
+static const u8 *const sHelpSystemTypeMatchupDescriptionTextPtrs[] = {
NULL,
gUnknown_81BA416,
gUnknown_81BA4E6,
@@ -446,7 +446,6 @@ static const u8 *const gUnknown_845B5D0[] = {
gUnknown_81BB156
};
-
static const u8 gUnknown_845B660[] = {
0x01, 0x02, 0x03, 0xff
};
@@ -739,7 +738,7 @@ static const u8 gUnknown_845B9BE[] = {
0x09, 0x01, 0x02, 0x03, 0x23, 0x25, 0x24, 0x04, 0x05, 0x06, 0x07, 0x08, 0x0a, 0x0b, 0x0c, 0x0d, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x27, 0x15, 0x26, 0x16, 0x17, 0x18, 0x1a, 0x0e, 0x1b, 0xff
};
-static const u8 *const gUnknown_845B9E0[] = {
+static const u8 *const sHelpSystemSubmenuIndexPointers[] = {
NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, gUnknown_845B660, NULL,
NULL, NULL, NULL, gUnknown_845B664, NULL,
@@ -780,48 +779,48 @@ static const u8 *const gUnknown_845B9E0[] = {
static const u16 unref_845BCB0[] = INCBIN_U16("graphics/help_system/unk_845BCB0.bin");
-static const u8 gUnknown_845C4B0[] = {
+static const u8 sHelpSystemContextTopicOrder[] = {
3, 0, 1, 2, 4, 5
};
-static const u8 gUnknown_845C4B6[][6] = {
- {0, 0, 0, 0, 0, 1},
- {0, 0, 0, 1, 0, 1},
- {0, 0, 0, 1, 0, 1},
- {0, 1, 0, 1, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 1, 0, 0, 1},
- {0, 1, 1, 0, 0, 1},
- {0, 0, 1, 0, 0, 1},
- {0, 0, 1, 0, 0, 1},
- {0, 1, 1, 0, 0, 1},
- {0, 1, 1, 0, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 1, 0, 0, 1},
- {0, 1, 1, 0, 0, 1},
- {1, 0, 0, 1, 0, 1},
- {1, 1, 1, 0, 0, 1},
- {1, 1, 1, 1, 0, 1},
- {1, 1, 1, 0, 0, 1},
- {1, 1, 1, 0, 1, 1},
- {1, 1, 1, 0, 0, 1},
- {1, 1, 1, 0, 0, 1},
- {1, 1, 1, 0, 0, 1},
- {1, 1, 1, 0, 0, 1},
- {1, 1, 1, 0, 1, 1},
- {1, 1, 1, 0, 1, 1},
- {1, 1, 1, 0, 1, 1},
- {1, 1, 1, 0, 1, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0}
+static const bool8 sHelpSystemContextTopicFlags[][6] = {
+ {FALSE, FALSE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, FALSE, FALSE, TRUE, FALSE, TRUE },
+ {FALSE, FALSE, FALSE, TRUE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, TRUE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {FALSE, FALSE, TRUE, FALSE, FALSE, TRUE },
+ {FALSE, FALSE, TRUE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {TRUE, FALSE, FALSE, TRUE, FALSE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {TRUE, TRUE, TRUE, TRUE, FALSE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, TRUE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, TRUE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, TRUE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, TRUE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, TRUE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
+ {FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}
};
static const u16 sMartMaps[] = {
@@ -961,12 +960,12 @@ static bool8 IsInDungeonMap(void)
void sub_812B35C(void)
{
- sub_812B4B8();
+ HelpSystem_EnableToggleWithRButton();
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
HelpSystem_SetSomeVariable2(0x16);
else if (IsInDungeonMap())
HelpSystem_SetSomeVariable2(0x15);
- else if (is_light_level_8_or_9(gMapHeader.mapType))
+ else if (IsMapTypeIndoors(gMapHeader.mapType))
{
if ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F)) || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_2F) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_2F)))
HelpSystem_SetSomeVariable2(0x0E);
@@ -1015,126 +1014,126 @@ void HelpSystem_Enable(void)
if (gQuestLogState != 2 && gQuestLogState != 3)
{
gHelpSystemEnabled = TRUE;
- sub_812B4B8();
+ HelpSystem_EnableToggleWithRButton();
}
}
-void sub_812B4AC(void)
+void HelpSystem_DisableToggleWithRButton(void)
{
- gUnknown_203F175 = 1;
+ gHelpSystemToggleWithRButtonDisabled = TRUE;
}
-void sub_812B4B8(void)
+void HelpSystem_EnableToggleWithRButton(void)
{
- gUnknown_203F175 = 0;
+ gHelpSystemToggleWithRButtonDisabled = FALSE;
}
-static void sub_812B4C4(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+static void ResetHelpSystemListMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- a0->sub.items = a1;
- a0->sub.totalItems = 1;
- a0->sub.maxShowed = 1;
- a0->sub.left = 1;
- a0->sub.top = 4;
+ helpListMenu->sub.items = listMenuItemsBuffer;
+ helpListMenu->sub.totalItems = 1;
+ helpListMenu->sub.maxShowed = 1;
+ helpListMenu->sub.left = 1;
+ helpListMenu->sub.top = 4;
}
-static void sub_812B4D8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+static void BuildAndPrintMainTopicsListMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- sub_812B4C4(a0, a1);
- sub_812B520(a0, a1);
- sub_812BF74(gUnknown_841DFAC);
- HelpSystem_InitListMenuController(a0, 0, gUnknown_3005E9C[2]);
- sub_812BF9C(a0, a1);
+ ResetHelpSystemListMenu(helpListMenu, listMenuItemsBuffer);
+ BuildMainTopicsListAndMoveToH00(helpListMenu, listMenuItemsBuffer);
+ PrintTextOnPanel2Row52RightAlign(gUnknown_841DFAC);
+ HelpSystem_InitListMenuController(helpListMenu, 0, sHelpSystemState[2]);
+ PrintHelpSystemTopicMouseoverDescription(helpListMenu, listMenuItemsBuffer);
sub_813BDA4(1);
sub_813BD5C(1);
}
-static void sub_812B520(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+static void BuildMainTopicsListAndMoveToH00(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
u8 i;
- u8 r4 = 0;
+ u8 totalItems = 0;
for (i = 0; i < 6; i++)
{
- if (gUnknown_845C4B6[sSomeVariable][gUnknown_845C4B0[i]] == 1)
+ if (sHelpSystemContextTopicFlags[sSomeVariable][sHelpSystemContextTopicOrder[i]] == TRUE)
{
- a1[r4].label = gUnknown_845B080[gUnknown_845C4B0[i]];
- a1[r4].index = gUnknown_845C4B0[i];
- r4++;
+ listMenuItemsBuffer[totalItems].label = sHelpSystemTopicPtrs[sHelpSystemContextTopicOrder[i]];
+ listMenuItemsBuffer[totalItems].index = sHelpSystemContextTopicOrder[i];
+ totalItems++;
}
}
- a1[r4 - 1].index = -2;
- a0->sub.totalItems = r4;
- a0->sub.maxShowed = r4;
- a0->sub.left = 0;
+ listMenuItemsBuffer[totalItems - 1].index = -2;
+ helpListMenu->sub.totalItems = totalItems;
+ helpListMenu->sub.maxShowed = totalItems;
+ helpListMenu->sub.left = 0;
}
-static void sub_812B5A8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+static void BuildAndPrintSubmenuList(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
sub_813BDE8(0);
sub_813BFC0(0);
sub_813BE78(1);
- sub_812B4C4(a0, a1);
- sub_812B614(a0, a1);
- sub_812BF74(gUnknown_841DFC9);
- HelpSystem_InitListMenuController(a0, a0->field_0C, a0->field_0D);
- HelpSystem_PrintTextAt(gUnknown_845B080[gUnknown_3005E9C[1]], 0, 0);
+ ResetHelpSystemListMenu(helpListMenu, listMenuItemsBuffer);
+ SetHelpSystemSubmenuItems(helpListMenu, listMenuItemsBuffer);
+ PrintTextOnPanel2Row52RightAlign(gUnknown_841DFC9);
+ HelpSystem_InitListMenuController(helpListMenu, helpListMenu->itemsAbove, helpListMenu->cursorPos);
+ HelpSystem_PrintTextAt(sHelpSystemTopicPtrs[sHelpSystemState[1]], 0, 0);
sub_813BDA4(1);
sub_813BD5C(1);
}
-static void sub_812B614(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+static void SetHelpSystemSubmenuItems(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- u8 r6 = 0;
- const u8 * r3 = gUnknown_845B9E0[sSomeVariable * 5 + gUnknown_3005E9C[1]];
+ u8 totalItems = 0;
+ const u8 * indexPtr = sHelpSystemSubmenuIndexPointers[sSomeVariable * 5 + sHelpSystemState[1]];
u8 i;
- for (i = 0; r3[i] != 0xFF; i++)
+ for (i = 0; indexPtr[i] != 0xFF; i++)
{
- if (sub_812B780(r3[i]) == TRUE)
+ if (HelpSystemSubmenuIndexIsActive(indexPtr[i]) == TRUE)
{
- if (gUnknown_3005E9C[1] == 0)
- a1[r6].label = gUnknown_845B0B0[r3[i]];
- else if (gUnknown_3005E9C[1] == 1)
- a1[r6].label = gUnknown_845B218[r3[i]];
- else if (gUnknown_3005E9C[1] == 2)
- a1[r6].label = gUnknown_845B3A0[r3[i]];
- else if (gUnknown_3005E9C[1] == 3)
- a1[r6].label = gUnknown_845B500[r3[i]];
+ if (sHelpSystemState[1] == 0)
+ listMenuItemsBuffer[totalItems].label = sHelpSystemSpecializedQuestionTextPtrs[indexPtr[i]];
+ else if (sHelpSystemState[1] == 1)
+ listMenuItemsBuffer[totalItems].label = sHelpSystemMenuTopicTextPtrs[indexPtr[i]];
+ else if (sHelpSystemState[1] == 2)
+ listMenuItemsBuffer[totalItems].label = sHelpSystemSpecializedStringsTextPtrs[indexPtr[i]];
+ else if (sHelpSystemState[1] == 3)
+ listMenuItemsBuffer[totalItems].label = sHelpSystemGeneralTopicTextPtrs[indexPtr[i]];
else
- a1[r6].label = gUnknown_845B540[r3[i]];
- a1[r6].index = r3[i];
- r6++;
+ listMenuItemsBuffer[totalItems].label = sHelpSystemTypeMatchupTextPtrs[indexPtr[i]];
+ listMenuItemsBuffer[totalItems].index = indexPtr[i];
+ totalItems++;
}
}
- if (sub_812B754() == TRUE)
+ if (HelpSystem_HasDefeatedBrock() == TRUE)
{
- for (i = 0, r3 = gUnknown_845B9BE; r3[i] != 0xFF; i++)
+ for (i = 0, indexPtr = gUnknown_845B9BE; indexPtr[i] != 0xFF; i++)
{
- a1[r6].label = gUnknown_845B3A0[r3[i]];
- a1[r6].index = r3[i];
- r6++;
+ listMenuItemsBuffer[totalItems].label = sHelpSystemSpecializedStringsTextPtrs[indexPtr[i]];
+ listMenuItemsBuffer[totalItems].index = indexPtr[i];
+ totalItems++;
}
}
- a1[r6].label = gUnknown_81B2E6F;
- a1[r6].index = -2;
- r6++;
- a0->sub.totalItems = r6;
- a0->sub.maxShowed = 7;
- a0->sub.left = 0;
- a0->sub.top = 21;
+ listMenuItemsBuffer[totalItems].label = gUnknown_81B2E6F;
+ listMenuItemsBuffer[totalItems].index = -2;
+ totalItems++;
+ helpListMenu->sub.totalItems = totalItems;
+ helpListMenu->sub.maxShowed = 7;
+ helpListMenu->sub.left = 0;
+ helpListMenu->sub.top = 21;
}
-static bool8 sub_812B754(void)
+static bool8 HelpSystem_HasDefeatedBrock(void)
{
- if (FlagGet(FLAG_DEFEATED_BROCK) == TRUE && gUnknown_3005E9C[1] == 2)
+ if (FlagGet(FLAG_DEFEATED_BROCK) == TRUE && sHelpSystemState[1] == 2)
return TRUE;
return FALSE;
}
-static bool8 sub_812B780(u8 id)
+static bool8 HelpSystemSubmenuIndexIsActive(u8 id)
{
u8 i = 0;
- if (gUnknown_3005E9C[1] == 0)
+ if (sHelpSystemState[1] == 0)
{
switch (id)
{
@@ -1188,7 +1187,7 @@ static bool8 sub_812B780(u8 id)
return FlagGet(FLAG_BADGE01_GET);
case 28:
case 40:
- return sub_812BB10();
+ return HasGottenAtLeastOneHM();
case 39:
return FlagGet(FLAG_GOT_FAME_CHECKER);
case 44:
@@ -1196,7 +1195,7 @@ static bool8 sub_812B780(u8 id)
}
return FALSE;
}
- if (gUnknown_3005E9C[1] == 1)
+ if (sHelpSystemState[1] == 1)
{
switch (id)
{
@@ -1254,7 +1253,7 @@ static bool8 sub_812B780(u8 id)
return FlagGet(FLAG_BADGE01_GET);
case 16:
case 17:
- return sub_812BB10();
+ return HasGottenAtLeastOneHM();
case 18:
return FlagGet(FLAG_GOT_BICYCLE);
case 48:
@@ -1262,9 +1261,9 @@ static bool8 sub_812B780(u8 id)
}
return FALSE;
}
- if (gUnknown_3005E9C[1] == 2)
+ if (sHelpSystemState[1] == 2)
{
- if (sub_812B754() == TRUE)
+ if (HelpSystem_HasDefeatedBrock() == TRUE)
{
for (i = 0; gUnknown_845B9BE[i] != 0xFF; i++)
{
@@ -1311,7 +1310,7 @@ static bool8 sub_812B780(u8 id)
return FlagGet(FLAG_SYS_POKEMON_GET);
case 36:
case 37:
- return sub_812BB10();
+ return HasGottenAtLeastOneHM();
case 3:
case 15:
case 18:
@@ -1320,7 +1319,7 @@ static bool8 sub_812B780(u8 id)
}
return TRUE;
}
- if (gUnknown_3005E9C[1] == 3)
+ if (sHelpSystemState[1] == 3)
{
switch (id)
{
@@ -1331,7 +1330,7 @@ static bool8 sub_812B780(u8 id)
}
return TRUE;
}
- if (gUnknown_3005E9C[1] == 4)
+ if (sHelpSystemState[1] == 4)
{
return TRUE;
}
@@ -1339,7 +1338,7 @@ static bool8 sub_812B780(u8 id)
return FALSE;
}
-static bool8 sub_812BB10(void)
+static bool8 HasGottenAtLeastOneHM(void)
{
if (FlagGet(FLAG_GOT_HM01) == TRUE)
return TRUE;
@@ -1358,64 +1357,64 @@ static bool8 sub_812BB10(void)
return FALSE;
}
-bool8 sub_812BB9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 RunHelpMenuSubroutine(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- switch (a0->field_0E)
+ switch (helpListMenu->state)
{
case 8:
- return sub_812BC54(a0, a1);
+ return HelpSystemSubroutine_PrintWelcomeMessage(helpListMenu, listMenuItemsBuffer);
case 9:
- return sub_812BC80(a0, a1);
+ return HelpSystemSubroutine_WelcomeWaitButton(helpListMenu, listMenuItemsBuffer);
case 10:
- return sub_812BCA8(a0, a1);
+ return HelpSystemSubroutine_WelcomeEndGotoMenu(helpListMenu, listMenuItemsBuffer);
case 0:
- return sub_812BCD0(a0, a1);
+ return HelpSystemSubroutine_MenuInputHandlerMain(helpListMenu, listMenuItemsBuffer);
case 1:
- return sub_812BD2C(a0, a1);
+ return HelpMenuSubroutine_InitSubmenu(helpListMenu, listMenuItemsBuffer);
case 2:
- return sub_812BD64(a0, a1);
+ return HelpMenuSubroutine_ReturnFromSubmenu(helpListMenu, listMenuItemsBuffer);
case 3:
- return sub_812BD98(a0, a1);
+ return HelpMenuSubroutine_SubmenuInputHandler(helpListMenu, listMenuItemsBuffer);
case 4:
- return sub_812BE10(a0, a1);
+ return HelpMenuSubroutine_HelpItemPrint(helpListMenu, listMenuItemsBuffer);
case 5:
- return sub_812BEEC(a0, a1);
+ return HelpMenuSubroutine_ReturnFromHelpItem(helpListMenu, listMenuItemsBuffer);
case 6:
- return sub_812BF18(a0, a1);
+ return HelpMenuSubroutine_HelpItemWaitButton(helpListMenu, listMenuItemsBuffer);
}
return FALSE;
}
-bool8 sub_812BC54(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpSystemSubroutine_PrintWelcomeMessage(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- sub_812BF74(gUnknown_841DFA5);
- sub_812BF5C();
+ PrintTextOnPanel2Row52RightAlign(gUnknown_841DFA5);
+ PrintWelcomeMessageOnPanel1();
sub_813BDA4(1);
sub_813BD5C(1);
- a0->field_0E = 9;
+ helpListMenu->state = 9;
return TRUE;
}
-bool8 sub_812BC80(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpSystemSubroutine_WelcomeWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- a0->field_0E = 10;
+ helpListMenu->state = 10;
}
return TRUE;
}
-bool8 sub_812BCA8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpSystemSubroutine_WelcomeEndGotoMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- gUnknown_3005E9C[2] = 0;
- sub_812BF94(a0);
- sub_812B4D8(a0, a1);
- a0->field_0E = 0;
+ sHelpSystemState[2] = 0;
+ ResetHelpSystemCursor(helpListMenu);
+ BuildAndPrintMainTopicsListMenu(helpListMenu, listMenuItemsBuffer);
+ helpListMenu->state = 0;
return TRUE;
}
-bool8 sub_812BCD0(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpSystemSubroutine_MenuInputHandlerMain(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
s32 v0 = HelpSystem_GetMenuInput();
switch (v0)
@@ -1425,42 +1424,42 @@ bool8 sub_812BCD0(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
return FALSE;
case -5:
case -4:
- sub_812BF9C(a0, a1);
+ PrintHelpSystemTopicMouseoverDescription(helpListMenu, listMenuItemsBuffer);
break;
case -3:
case -1:
break;
default:
- gUnknown_3005E9C[1] = v0;
- a0->field_0E = 1;
+ sHelpSystemState[1] = v0;
+ helpListMenu->state = 1;
break;
}
return TRUE;
}
-bool8 sub_812BD2C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpMenuSubroutine_InitSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- gUnknown_3005E9C[0] = 1;
- gUnknown_3005E9C[2] = a0->field_0D;
- sub_812BF94(a0);
- sub_812B5A8(a0, a1);
+ sHelpSystemState[0] = 1;
+ sHelpSystemState[2] = helpListMenu->cursorPos;
+ ResetHelpSystemCursor(helpListMenu);
+ BuildAndPrintSubmenuList(helpListMenu, listMenuItemsBuffer);
sub_813C75C();
HelpSystem_SetInputDelay(2);
- a0->field_0E = 3;
+ helpListMenu->state = 3;
return TRUE;
}
-bool8 sub_812BD64(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpMenuSubroutine_ReturnFromSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
sub_813C004(0, 0);
sub_813C004(1, 0);
- gUnknown_3005E9C[0] = 0;
- sub_812B4D8(a0, a1);
- a0->field_0E = 0;
+ sHelpSystemState[0] = 0;
+ BuildAndPrintMainTopicsListMenu(helpListMenu, listMenuItemsBuffer);
+ helpListMenu->state = 0;
return TRUE;
}
-bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpMenuSubroutine_SubmenuInputHandler(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
s32 v0 = HelpSystem_GetMenuInput();
switch (v0)
@@ -1468,7 +1467,7 @@ bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
case -6:
return FALSE;
case -2:
- a0->field_0E = 2;
+ helpListMenu->state = 2;
break;
case -5:
case -4:
@@ -1476,8 +1475,8 @@ bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
case -1:
break;
default:
- gUnknown_3005E9C[3] = v0;
- a0->field_0E = 4;
+ sHelpSystemState[3] = v0;
+ helpListMenu->state = 4;
break;
}
return TRUE;
@@ -1485,60 +1484,60 @@ bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
void sub_812BDEC(void)
{
- HelpSystem_PrintTextAt(gUnknown_845B080[gUnknown_3005E9C[1]], 0, 0);
+ HelpSystem_PrintTextAt(sHelpSystemTopicPtrs[sHelpSystemState[1]], 0, 0);
}
-bool8 sub_812BE10(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpMenuSubroutine_HelpItemPrint(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- gUnknown_3005E9C[0] = 2;
+ sHelpSystemState[0] = 2;
sub_813BDA4(0);
HelpSystem_FillPanel1();
- sub_812BF74(gUnknown_841DFBE);
+ PrintTextOnPanel2Row52RightAlign(gUnknown_841DFBE);
sub_813BDE8(1);
sub_813BEE4(1);
- if (gUnknown_3005E9C[1] == 0)
+ if (sHelpSystemState[1] == 0)
{
- HelpSystem_PrintTwoStrings(gUnknown_845B0B0[gUnknown_3005E9C[3]], gUnknown_845B164[gUnknown_3005E9C[3]]);
+ HelpSystem_PrintTwoStrings(sHelpSystemSpecializedQuestionTextPtrs[sHelpSystemState[3]], sHelpSystemSpecializedAnswerTextPtrs[sHelpSystemState[3]]);
}
- else if (gUnknown_3005E9C[1] == 1)
+ else if (sHelpSystemState[1] == 1)
{
- HelpSystem_PrintTwoStrings(gUnknown_845B218[gUnknown_3005E9C[3]], gUnknown_845B2DC[gUnknown_3005E9C[3]]);
+ HelpSystem_PrintTwoStrings(sHelpSystemMenuTopicTextPtrs[sHelpSystemState[3]], sHelpSystemSpecializedControlsTextPtrs[sHelpSystemState[3]]);
}
- else if (gUnknown_3005E9C[1] == 2)
+ else if (sHelpSystemState[1] == 2)
{
- HelpSystem_PrintTwoStrings(gUnknown_845B3A0[gUnknown_3005E9C[3]], gUnknown_845B450[gUnknown_3005E9C[3]]);
+ HelpSystem_PrintTwoStrings(sHelpSystemSpecializedStringsTextPtrs[sHelpSystemState[3]], sHelpSystemSpecializedStringDefinitionsTextPtrs[sHelpSystemState[3]]);
}
- else if (gUnknown_3005E9C[1] == 3)
+ else if (sHelpSystemState[1] == 3)
{
- HelpSystem_PrintTwoStrings(gUnknown_845B500[gUnknown_3005E9C[3]], gUnknown_845B520[gUnknown_3005E9C[3]]);
+ HelpSystem_PrintTwoStrings(sHelpSystemGeneralTopicTextPtrs[sHelpSystemState[3]], sHelpSystemGeneralTopicDescriptionTextPtrs[sHelpSystemState[3]]);
}
else
{
- HelpSystem_PrintTwoStrings(gUnknown_845B540[gUnknown_3005E9C[3]], gUnknown_845B5D0[gUnknown_3005E9C[3]]);
+ HelpSystem_PrintTwoStrings(sHelpSystemTypeMatchupTextPtrs[sHelpSystemState[3]], sHelpSystemTypeMatchupDescriptionTextPtrs[sHelpSystemState[3]]);
}
sub_813BDA4(1);
sub_813BD5C(1);
- a0->field_0E = 6;
+ helpListMenu->state = 6;
return TRUE;
}
-bool8 sub_812BEEC(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpMenuSubroutine_ReturnFromHelpItem(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- gUnknown_3005E9C[0] = 1;
- sub_812B5A8(a0, a1);
+ sHelpSystemState[0] = 1;
+ BuildAndPrintSubmenuList(helpListMenu, listMenuItemsBuffer);
sub_813C75C();
HelpSystem_SetInputDelay(2);
- a0->field_0E = 3;
+ helpListMenu->state = 3;
return TRUE;
}
-bool8 sub_812BF18(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpMenuSubroutine_HelpItemWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
if (JOY_NEW(B_BUTTON) || JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- a0->field_0E = 5;
+ helpListMenu->state = 5;
return TRUE;
}
if (JOY_NEW(L_BUTTON | R_BUTTON))
@@ -1546,13 +1545,13 @@ bool8 sub_812BF18(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
return TRUE;
}
-static void sub_812BF5C(void)
+static void PrintWelcomeMessageOnPanel1(void)
{
HelpSystem_FillPanel1();
HelpSystem_PrintTextAt(gUnknown_81B2FC9, 0, 0);
}
-static void sub_812BF74(const u8 * str)
+static void PrintTextOnPanel2Row52RightAlign(const u8 * str)
{
HelpSystem_FillPanel2();
HelpSystem_PrintTextRightAlign_Row52(str);
@@ -1560,21 +1559,21 @@ static void sub_812BF74(const u8 * str)
u8 sub_812BF88(void)
{
- return gUnknown_3005E9C[0];
+ return sHelpSystemState[0];
}
-static void sub_812BF94(struct HelpSystemListMenu * a0)
+static void ResetHelpSystemCursor(struct HelpSystemListMenu * helpListMenu)
{
- a0->field_0C = 0;
- a0->field_0D = 0;
+ helpListMenu->itemsAbove = 0;
+ helpListMenu->cursorPos = 0;
}
-static void sub_812BF9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+static void PrintHelpSystemTopicMouseoverDescription(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- s32 index = a1[a0->field_0C + a0->field_0D].index;
+ s32 index = listMenuItemsBuffer[helpListMenu->itemsAbove + helpListMenu->cursorPos].index;
if (index == -2)
- HelpSystem_PrintText_813C584(gUnknown_845B098[5]);
+ HelpSystem_PrintText_813C584(sHelpSystemTopicMouseoverDescriptionPtrs[5]);
else
- HelpSystem_PrintText_813C584(gUnknown_845B098[index]);
+ HelpSystem_PrintText_813C584(sHelpSystemTopicMouseoverDescriptionPtrs[index]);
sub_813BE30(1);
}
diff --git a/src/librfu_intr.c b/src/librfu_intr.c
new file mode 100644
index 000000000..23962a937
--- /dev/null
+++ b/src/librfu_intr.c
@@ -0,0 +1,402 @@
+#include "global.h"
+#include "librfu.h"
+
+static void sio32intr_clock_master(void);
+static void sio32intr_clock_slave(void);
+static u16 handshake_wait(u16 slot);
+static void STWI_set_timer_in_RAM(u8 count);
+static void STWI_stop_timer_in_RAM(void);
+static void STWI_init_slave(void);
+static void Callback_Dummy_M(int reqCommandId, int error, void (*callbackM)());
+static void Callback_Dummy_S(u16 reqCommandId, void (*callbackS)(u16));
+static void Callback_Dummy_ID(void (*callbackId)(void));
+
+void IntrSIO32(void)
+{
+ if (gSTWIStatus->state == 10)
+ {
+ if (gSTWIStatus->callbackID != NULL)
+ Callback_Dummy_ID(gSTWIStatus->callbackID);
+ }
+ else
+ {
+ if (gSTWIStatus->msMode == AGB_CLK_MASTER)
+ sio32intr_clock_master();
+ else
+ sio32intr_clock_slave();
+ }
+}
+
+static void sio32intr_clock_master(void)
+{
+ u32 regSIODATA32;
+ u32 ackLen;
+
+ STWI_set_timer_in_RAM(80);
+ regSIODATA32 = REG_SIODATA32;
+
+ if (gSTWIStatus->state == 0) // master send req
+ {
+ if (regSIODATA32 == 0x80000000)
+ {
+ if (gSTWIStatus->reqNext <= gSTWIStatus->reqLength)
+ {
+ REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket->rfuPacket8.data)[gSTWIStatus->reqNext];
+ gSTWIStatus->reqNext++;
+ }
+ else
+ {
+ gSTWIStatus->state = 1; // master wait ack
+ REG_SIODATA32 = 0x80000000;
+ }
+ }
+ else
+ {
+ STWI_stop_timer_in_RAM();
+ STWI_set_timer_in_RAM(130);
+ return;
+ }
+ }
+ else if (gSTWIStatus->state == 1) // master wait ack
+ {
+ if ((regSIODATA32 & 0xFFFF0000) == 0x99660000)
+ {
+ gSTWIStatus->ackNext = 0;
+ ((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->ackNext] = regSIODATA32;
+ gSTWIStatus->ackNext++;
+ gSTWIStatus->ackActiveCommand = regSIODATA32;
+ gSTWIStatus->ackLength = ackLen = regSIODATA32 >> 8;
+ if ((ackLen = gSTWIStatus->ackLength) >= gSTWIStatus->ackNext)
+ {
+ gSTWIStatus->state = 2; // master receive ack
+ REG_SIODATA32 = 0x80000000;
+ }
+ else
+ {
+ gSTWIStatus->state = 3; // master done ack
+ }
+ }
+ else
+ {
+ STWI_stop_timer_in_RAM();
+ STWI_set_timer_in_RAM(130);
+ return;
+ }
+ }
+ else if (gSTWIStatus->state == 2) // master receive ack
+ {
+ ((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->ackNext] = regSIODATA32;
+ gSTWIStatus->ackNext++;
+ if (gSTWIStatus->ackLength < gSTWIStatus->ackNext)
+ gSTWIStatus->state = 3; // master done ack
+ else
+ REG_SIODATA32 = 0x80000000;
+ }
+
+ if (handshake_wait(1) == 1)
+ return;
+
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS | SIO_MULTI_SD;
+
+ if (handshake_wait(0) == 1)
+ return;
+
+ STWI_stop_timer_in_RAM();
+
+ if (gSTWIStatus->state == 3) // master done ack
+ {
+ if (
+ gSTWIStatus->ackActiveCommand == (0x80 | ID_MS_CHANGE_REQ)
+ || gSTWIStatus->ackActiveCommand == (0x80 | ID_DATA_TX_AND_CHANGE_REQ)
+ || gSTWIStatus->ackActiveCommand == (0x80 | ID_UNK35_REQ)
+ || gSTWIStatus->ackActiveCommand == (0x80 | ID_RESUME_RETRANSMIT_AND_CHANGE_REQ)
+ )
+ {
+
+ gSTWIStatus->msMode = AGB_CLK_SLAVE;
+ REG_SIODATA32 = 0x80000000;
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS;
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS | SIO_ENABLE;
+ gSTWIStatus->state = 5; // slave receive req init
+ }
+ else
+ {
+ if (gSTWIStatus->ackActiveCommand == 0xEE)
+ {
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
+ gSTWIStatus->state = 4; // error
+ gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION;
+ }
+ else
+ {
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
+ gSTWIStatus->state = 4; // error
+ }
+ }
+ gSTWIStatus->sending = 0;
+ if (gSTWIStatus->callbackM != NULL)
+ Callback_Dummy_M(gSTWIStatus->reqActiveCommand, gSTWIStatus->error, gSTWIStatus->callbackM);
+ }
+ else
+ {
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS | SIO_ENABLE;
+ }
+}
+
+static void sio32intr_clock_slave(void)
+{
+ u32 regSIODATA32;
+ u32 r0;
+ register u32 reqLen asm("r2");
+
+ gSTWIStatus->timerActive = 0;
+ STWI_set_timer_in_RAM(100);
+ if (handshake_wait(0) == 1)
+ return;
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS | SIO_MULTI_SD;
+ regSIODATA32 = REG_SIODATA32;
+ if (gSTWIStatus->state == 5) // slave receive req init
+ {
+ ((u32*)gSTWIStatus->rxPacket)[0] = regSIODATA32;
+ gSTWIStatus->reqNext = 1;
+ r0 = 0x99660000;
+ if ((regSIODATA32 >> 16) == (r0 >> 16))
+ {
+ gSTWIStatus->reqLength = reqLen = regSIODATA32 >> 8;
+ gSTWIStatus->reqActiveCommand = regSIODATA32;
+ if (gSTWIStatus->reqLength == 0)
+ {
+ if (
+ gSTWIStatus->reqActiveCommand == ID_MS_CHANGE_REQ
+ || gSTWIStatus->reqActiveCommand == ID_DATA_READY_AND_CHANGE_REQ
+ || gSTWIStatus->reqActiveCommand == ID_DISCONNECTED_AND_CHANGE_REQ
+ || gSTWIStatus->reqActiveCommand == ID_UNK36_REQ
+ )
+ {
+ gSTWIStatus->ackActiveCommand = gSTWIStatus->reqActiveCommand + 0x80;
+ ((u32*)gSTWIStatus->txPacket)[0] = 0x99660000 + gSTWIStatus->ackActiveCommand;
+ gSTWIStatus->ackLength = 0;
+ }
+ else
+ {
+ ((u32*)gSTWIStatus->txPacket)[0] = 0x996601EE;
+ if (gSTWIStatus->reqActiveCommand >= 0x10 && gSTWIStatus->reqActiveCommand <= 0x3D)
+ {
+ ((u32*)gSTWIStatus->txPacket)[1] = 1;
+ }
+ else
+ {
+ ((u32*)gSTWIStatus->txPacket)[1] = 2;
+ }
+ gSTWIStatus->ackLength = 1;
+ gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION;
+ }
+ REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[0];
+ gSTWIStatus->ackNext = 1;
+ gSTWIStatus->state = 7; // slave send ack
+ }
+ else
+ {
+ REG_SIODATA32 = 0x80000000;
+ gSTWIStatus->reqNext = 1;
+ gSTWIStatus->state = 6; // slave receive req
+ }
+ }
+ else
+ {
+ STWI_stop_timer_in_RAM();
+ STWI_set_timer_in_RAM(100);
+ return;
+ }
+ }
+ else if (gSTWIStatus->state == 6) // slave receive req
+ {
+ ((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->reqNext] = regSIODATA32;
+ gSTWIStatus->reqNext++;
+ if (gSTWIStatus->reqLength < gSTWIStatus->reqNext)
+ {
+ if (
+ gSTWIStatus->reqActiveCommand == ID_DATA_READY_AND_CHANGE_REQ
+ || gSTWIStatus->reqActiveCommand == ID_DISCONNECTED_AND_CHANGE_REQ
+ || gSTWIStatus->reqActiveCommand == ID_UNK36_REQ
+ )
+ {
+ gSTWIStatus->ackActiveCommand = gSTWIStatus->reqActiveCommand + 0x80;
+ ((u32*)gSTWIStatus->txPacket)[0] = 0x99660000 | gSTWIStatus->ackActiveCommand;
+ gSTWIStatus->ackLength = 0;
+ }
+ else
+ {
+ ((u32*)gSTWIStatus->txPacket)[0] = 0x996601EE;
+ if (gSTWIStatus->reqActiveCommand >= 0x10 && gSTWIStatus->reqActiveCommand <= 0x3D)
+ {
+ ((u32*)gSTWIStatus->txPacket)[1] = 1;
+ }
+ else
+ {
+ ((u32*)gSTWIStatus->txPacket)[1] = 2;
+ }
+ gSTWIStatus->ackLength = 1;
+ gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION;
+ }
+ REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[0];
+ gSTWIStatus->ackNext = 1;
+ gSTWIStatus->state = 7; // slave send ack
+ }
+ else
+ {
+ REG_SIODATA32 = 0x80000000;
+ }
+ }
+ else if (gSTWIStatus->state == 7) // slave send ack
+ {
+ if (regSIODATA32 == 0x80000000)
+ {
+ if (gSTWIStatus->ackLength < gSTWIStatus->ackNext)
+ {
+ gSTWIStatus->state = 8; // slave done ack
+ }
+ else
+ {
+ REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[gSTWIStatus->ackNext];
+ gSTWIStatus->ackNext++;
+ }
+ }
+ else
+ {
+ STWI_stop_timer_in_RAM();
+ STWI_set_timer_in_RAM(100);
+ return;
+ }
+ }
+ if (handshake_wait(1) == 1)
+ return;
+ if (gSTWIStatus->state == 8) // slave done ack
+ {
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS;
+ STWI_stop_timer_in_RAM();
+ if (gSTWIStatus->error == ERR_REQ_CMD_ACK_REJECTION)
+ {
+ STWI_init_slave();
+ if (gSTWIStatus->callbackS != NULL)
+ {
+ Callback_Dummy_S(0x1EE, gSTWIStatus->callbackS);
+ }
+ }
+ else
+ {
+ REG_SIODATA32 = 0;
+ REG_SIOCNT = 0;
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
+ gSTWIStatus->msMode = AGB_CLK_MASTER;
+ gSTWIStatus->state = 0; // master send req
+ if (gSTWIStatus->callbackS != NULL)
+ {
+ Callback_Dummy_S((gSTWIStatus->reqLength << 8) | (gSTWIStatus->reqActiveCommand), gSTWIStatus->callbackS);
+ }
+ }
+ }
+ else
+ {
+ REG_IME = 0;
+ if (REG_TM0CNT_H & TIMER_ENABLE)
+ {
+ if ((REG_TM0CNT_H & 0x03) == TIMER_1CLK)
+ {
+ while (REG_TM0CNT_L > 0xFF9B);
+ }
+ else
+ {
+ while (REG_TM0CNT_L > 0xFFFE);
+ }
+ }
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS;
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS | SIO_ENABLE;
+ REG_IME = 1;
+ }
+}
+
+static u16 handshake_wait(u16 slot)
+{
+ do
+ {
+ if ((gSTWIStatus->timerActive & 0xFF) == 1)
+ {
+ gSTWIStatus->timerActive = 0;
+ return 1;
+ }
+ } while ((REG_SIOCNT & SIO_MULTI_SI) != (slot << SIO_MULTI_SI_SHIFT));
+ return 0;
+}
+
+static void STWI_set_timer_in_RAM(u8 count)
+{
+ vu16* regTMCNTL = (vu16*)(REG_ADDR_TMCNT_L + gSTWIStatus->timerSelect * 4);
+ vu16* regTMCNTH = (vu16*)(REG_ADDR_TMCNT_H + gSTWIStatus->timerSelect * 4);
+ REG_IME = 0;
+ switch (count)
+ {
+ case 50:
+ *regTMCNTL = 0xFCCB;
+ gSTWIStatus->timerState = 1;
+ break;
+ case 80:
+ *regTMCNTL = 0xFAE0;
+ gSTWIStatus->timerState = 2;
+ break;
+ case 100:
+ *regTMCNTL = 0xF996;
+ gSTWIStatus->timerState = 3;
+ break;
+ case 130:
+ *regTMCNTL = 0xF7AD;
+ gSTWIStatus->timerState = 4;
+ break;
+ }
+ *regTMCNTH = TIMER_ENABLE | TIMER_64CLK | TIMER_256CLK | TIMER_INTR_ENABLE;
+ REG_IF = INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect;
+ REG_IME = 1;
+}
+
+static void STWI_stop_timer_in_RAM(void)
+{
+ gSTWIStatus->timerState = 0;
+ REG_TMCNT_L(gSTWIStatus->timerSelect) = 0;
+ REG_TMCNT_H(gSTWIStatus->timerSelect) = 0;
+}
+
+static void STWI_init_slave(void)
+{
+ gSTWIStatus->state = 5; // slave receive req init
+ gSTWIStatus->msMode = AGB_CLK_SLAVE;
+ gSTWIStatus->reqLength = 0;
+ gSTWIStatus->reqNext = 0;
+ gSTWIStatus->reqActiveCommand = 0;
+ gSTWIStatus->ackLength = 0;
+ gSTWIStatus->ackNext = 0;
+ gSTWIStatus->ackActiveCommand = 0;
+ gSTWIStatus->timerState = 0;
+ gSTWIStatus->timerActive = 0;
+ gSTWIStatus->error = 0;
+ gSTWIStatus->recoveryCount = 0;
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS | SIO_ENABLE;
+}
+
+NAKED
+static void Callback_Dummy_M(int reqCommandId, int error, void (*callbackM)())
+{
+ asm("bx r2");
+}
+
+NAKED
+static void Callback_Dummy_S(u16 reqCommandId, void (*callbackS)(u16))
+{
+ asm("bx r1");
+}
+
+NAKED
+static void Callback_Dummy_ID(void (*callbackId)(void))
+{
+ asm("bx r0");
+}
diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c
index dccd342f2..85f3ef3a9 100644
--- a/src/librfu_rfu.c
+++ b/src/librfu_rfu.c
@@ -2,54 +2,54 @@
struct LLSFStruct
{
- u8 unk00;
+ u8 frameSize;
u8 unk01;
u8 unk02;
- u8 unk03;
- u8 unk04;
- u8 unk05;
- u8 unk06;
+ u8 slotStateShift;
+ u8 ackShift;
+ u8 phaseShit;
+ u8 nShift;
u8 unk07;
u8 unk08;
- u8 unk09;
- u8 unk0A;
- u8 unk0B;
- u8 unk0C;
+ u8 slotStateMask;
+ u8 ackMask;
+ u8 phaseMask;
+ u8 nMask;
u16 unk0E;
};
struct RfuLocalStruct
{
- u8 unk00;
- u8 unk01;
- u8 unk02;
- u8 unk03;
- u8 unk04;
- u8 unk05;
- u16 unk06;
+ u8 unk0;
+ u8 unk1;
+ u8 slotState;
+ u8 ack;
+ u8 phase;
+ u8 n;
+ u16 unk6;
};
-static void rfu_CB_defaultCallback(u8, u16);
-static void rfu_CB_reset(u8, u16);
-static void rfu_CB_configGameData(u8, u16);
-static void rfu_CB_stopMode(u8, u16);
-static void rfu_CB_startSearchChild(u8, u16);
-static void rfu_CB_pollAndEndSearchChild(u8, u16);
-static void rfu_CB_startSearchParent(u8, u16);
-static void rfu_CB_pollSearchParent(u8, u16);
-static void rfu_CB_pollConnectParent(u8, u16);
-static void rfu_CB_pollConnectParent(u8, u16);
-static void rfu_CB_disconnect(u8, u16);
-static void rfu_CB_CHILD_pollConnectRecovery(u8, u16);
-static void rfu_CB_sendData(UNUSED u8, u16);
-static void rfu_CB_sendData2(UNUSED u8, u16);
-static void rfu_CB_sendData3(u8, u16);
-static void rfu_CB_recvData(u8, u16);
-static void rfu_enableREQCallback(bool8);
+static void rfu_CB_defaultCallback(u8 reqCommand, u16 reqResult);
+static void rfu_CB_reset(u8 reqCommand, u16 reqResult);
+static void rfu_CB_configGameData(u8 reqCommand, u16 reqResult);
+static void rfu_CB_stopMode(u8 reqCommand, u16 reqResult);
+static void rfu_CB_startSearchChild(u8 reqCommand, u16 reqResult);
+static void rfu_CB_pollAndEndSearchChild(u8 reqCommand, u16 reqResult);
+static void rfu_CB_startSearchParent(u8 reqCommand, u16 reqResult);
+static void rfu_CB_pollSearchParent(u8 reqCommand, u16 reqResult);
+static void rfu_CB_pollConnectParent(u8 reqCommand, u16 reqResult);
+static void rfu_CB_pollConnectParent(u8 reqCommand, u16 reqResult);
+static void rfu_CB_disconnect(u8 reqCommand, u16 reqResult);
+static void rfu_CB_CHILD_pollConnectRecovery(u8 reqCommand, u16 reqResult);
+static void rfu_CB_sendData(UNUSED u8 reqCommand, u16 reqResult);
+static void rfu_CB_sendData2(UNUSED u8 reqCommand, u16 reqResult);
+static void rfu_CB_sendData3(u8 reqCommand, u16 reqResult);
+static void rfu_CB_recvData(u8 reqCommand, u16 reqResult);
+static void rfu_enableREQCallback(bool8 enable);
static void rfu_STC_clearAPIVariables(void);
static void rfu_STC_readChildList(void);
static void rfu_STC_readParentCandidateList(void);
-static void rfu_STC_REQ_callback(u8, u16);
+static void rfu_STC_REQ_callback(u8 reqCommand, u16 reqResult);
static void rfu_STC_removeLinkData(u8, u8);
static void rfu_STC_fastCopy(const u8 **, u8 **, s32);
static void rfu_STC_clearLinkStatus(u8);
@@ -74,13 +74,38 @@ struct RfuStatic *gRfuStatic;
struct RfuFixed *gRfuFixed;
static const struct LLSFStruct llsf_struct[2] = {
- {
- 2, 14, 0, 10, 9, 5, 7, 2,
- 0, 15, 1, 3, 3, 0x1f
- }, {
- 3, 22, 18, 14, 13, 9, 11, 3,
- 15, 15, 1, 3, 3, 0x7f
- }
+ [MODE_CHILD] = {
+ .frameSize = 2,
+ .unk01 = 14,
+ .unk02 = 0,
+ .slotStateShift = 10,
+ .ackShift = 9,
+ .phaseShit = 5,
+ .nShift = 7,
+ .unk07 = 2,
+ .unk08 = 0,
+ .slotStateMask = 15,
+ .ackMask = 1,
+ .phaseMask = 3,
+ .nMask = 3,
+ .unk0E = 0x1f
+ },
+ [MODE_PARENT] = {
+ .frameSize = 3,
+ .unk01 = 22,
+ .unk02 = 18,
+ .slotStateShift = 14,
+ .ackShift = 13,
+ .phaseShit = 9,
+ .nShift = 11,
+ .unk07 = 3,
+ .unk08 = 15,
+ .slotStateMask = 15,
+ .ackMask = 1,
+ .phaseMask = 3,
+ .nMask = 3,
+ .unk0E = 0x7f
+ }
};
#ifdef EMERALD
@@ -91,46 +116,46 @@ static const char lib_ver[] = "RFU_V1024";
static const char str_checkMbootLL[] = "RFU-MBOOT";
-u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam)
+u16 rfu_initializeAPI(u32 *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam)
{
u16 i;
u16 *dst;
const u16 *src;
- u16 r3;
+ u16 buffByteSizeMax;
- // is in EWRAM?
- if (((u32)APIBuffer & 0xF000000) == 0x2000000 && copyInterruptToRam)
+ // is in EWRAM?
+ if (((uintptr_t)APIBuffer & 0xF000000) == 0x2000000 && copyInterruptToRam)
return ERR_RFU_API_BUFF_ADR;
- // is not 4-byte aligned?
+ // is not 4-byte aligned?
if ((u32)APIBuffer & 3)
return ERR_RFU_API_BUFF_ADR;
if (copyInterruptToRam)
{
// An assert/debug print may have existed before, ie
// printf("%s %u < %u", "somefile.c:12345", buffByteSize, num)
- // to push this into r3?
- r3 = sizeof(struct RfuAPIBuffer);
- if (buffByteSize < r3)
+ // to push this into buffByteSizeMax?
+ buffByteSizeMax = RFU_API_BUFF_SIZE_RAM;
+ if (buffByteSize < buffByteSizeMax)
return ERR_RFU_API_BUFF_SIZE;
}
if (!copyInterruptToRam)
{
- r3 = 0x504; // same issue as above
- if (buffByteSize < r3)
+ buffByteSizeMax = RFU_API_BUFF_SIZE_ROM; // same issue as above
+ if (buffByteSize < buffByteSizeMax)
return ERR_RFU_API_BUFF_SIZE;
}
- gRfuLinkStatus = &APIBuffer->linkStatus;
- gRfuStatic = &APIBuffer->static_;
- gRfuFixed = &APIBuffer->fixed;
- gRfuSlotStatusNI[0] = &APIBuffer->NI[0];
- gRfuSlotStatusUNI[0] = &APIBuffer->UNI[0];
+ gRfuLinkStatus = (void *)APIBuffer + 0;
+ gRfuStatic = (void *)APIBuffer + 0xb4;
+ gRfuFixed = (void *)APIBuffer + 0xdc;
+ gRfuSlotStatusNI[0] = (void *)APIBuffer + 0x1bc;
+ gRfuSlotStatusUNI[0] = (void *)APIBuffer + 0x37c;
for (i = 1; i < RFU_CHILD_MAX; ++i)
{
gRfuSlotStatusNI[i] = &gRfuSlotStatusNI[i - 1][1];
gRfuSlotStatusUNI[i] = &gRfuSlotStatusUNI[i - 1][1];
}
- // TODO: Is it possible to fix the following 2 statements?
- // It's equivalent to:
+ // TODO: Is it possible to fix the following 2 statements?
+ // It's equivalent to:
// gRfuFixed->STWIBuffer = &APIBuffer->intr;
// STWI_init_all(&APIBuffer->intr, sioIntrTable_p, copyInterruptToRam);
gRfuFixed->STWIBuffer = (struct RfuIntrStruct *)&gRfuSlotStatusUNI[3][1];
@@ -143,10 +168,10 @@ u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc
gRfuSlotStatusUNI[i]->recvBuffer = NULL;
gRfuSlotStatusUNI[i]->recvBufferSize = 0;
}
- src = (const u16 *)((u32)&rfu_STC_fastCopy & ~1);
+ src = (const u16 *)((uintptr_t)&rfu_STC_fastCopy & ~1);
dst = gRfuFixed->fastCopyBuffer;
// rfu_REQ_changeMasterSlave is the function next to rfu_STC_fastCopy
- for (r3 = ((void *)rfu_REQ_changeMasterSlave - (void *)rfu_STC_fastCopy) / sizeof(u16), --r3; r3 != 0xFFFF; --r3)
+ for (buffByteSizeMax = ((void *)rfu_REQ_changeMasterSlave - (void *)rfu_STC_fastCopy) / sizeof(u16), --buffByteSizeMax; buffByteSizeMax != 0xFFFF; --buffByteSizeMax)
*dst++ = *src++;
gRfuFixed->fastCopyPtr = (void *)gRfuFixed->fastCopyBuffer + 1;
return 0;
@@ -155,19 +180,19 @@ u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc
static void rfu_STC_clearAPIVariables(void)
{
u16 IMEBackup = REG_IME;
- u8 i, r4;
+ u8 i, flags;
REG_IME = 0;
- r4 = gRfuStatic->flags;
+ flags = gRfuStatic->flags;
CpuFill16(0, gRfuStatic, sizeof(struct RfuStatic));
- gRfuStatic->flags = r4 & 8;
+ gRfuStatic->flags = flags & 8;
CpuFill16(0, gRfuLinkStatus, sizeof(struct RfuLinkStatus));
gRfuLinkStatus->watchInterval = 4;
gRfuStatic->nowWatchInterval = 0;
gRfuLinkStatus->parentChild = MODE_NEUTRAL;
rfu_clearAllSlot();
gRfuStatic->SCStartFlag = 0;
- for (i = 0; i < NELEMS(gRfuStatic->cidBak); ++i)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
gRfuStatic->cidBak[i] = 0;
REG_IME = IMEBackup;
}
@@ -180,20 +205,20 @@ void rfu_REQ_PARENT_resumeRetransmitAndChange(void)
u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag)
{
- struct RfuIntrStruct *buf;
+ u8 *buf;
*ackFlag = 0;
if (gRfuLinkStatus->parentChild != MODE_PARENT)
return ERR_MODE_NOT_PARENT;
buf = rfu_getSTWIRecvBuffer();
- switch (buf->rxPacketAlloc.rfuPacket8.data[0])
+ switch (*buf)
{
case 40:
case 54:
- if (buf->rxPacketAlloc.rfuPacket8.data[1] == 0)
+ if (buf[1] == 0)
*ackFlag = gRfuLinkStatus->connSlotFlag;
else
- *ackFlag = buf->rxPacketAlloc.rfuPacket8.data[4];
+ *ackFlag = buf[4];
return 0;
default:
return ERR_REQ_CMD_ID;
@@ -205,9 +230,9 @@ void rfu_setTimerInterrupt(u8 timerNo, IntrFunc *timerIntrTable_p)
STWI_init_timer(timerIntrTable_p, timerNo);
}
-struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void)
+u8 *rfu_getSTWIRecvBuffer(void)
{
- return gRfuFixed->STWIBuffer;
+ return (u8 *)gRfuFixed->STWIBuffer;
}
void rfu_setMSCCallback(void (*callback)(u16 reqCommandId))
@@ -229,26 +254,26 @@ static void rfu_enableREQCallback(bool8 enable)
gRfuStatic->flags &= 0xF7;
}
-static void rfu_STC_REQ_callback(u8 r5, u16 reqResult)
+static void rfu_STC_REQ_callback(u8 reqCommand, u16 reqResult)
{
STWI_set_Callback_M(rfu_CB_defaultCallback);
gRfuStatic->reqResult = reqResult;
if (gRfuStatic->flags & 8)
- gRfuFixed->reqCallback(r5, reqResult);
+ gRfuFixed->reqCallback(reqCommand, reqResult);
}
-static void rfu_CB_defaultCallback(u8 r0, u16 reqResult)
+static void rfu_CB_defaultCallback(u8 reqCommand, u16 reqResult)
{
- s32 r5;
+ s32 bmSlotFlags;
u8 i;
- if (r0 == 0xFF)
+ if (reqCommand == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ)
{
if (gRfuStatic->flags & 8)
- gRfuFixed->reqCallback(r0, reqResult);
- r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
+ gRfuFixed->reqCallback(reqCommand, reqResult);
+ bmSlotFlags = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
for (i = 0; i < RFU_CHILD_MAX; ++i)
- if ((r5 >> i) & 1)
+ if ((bmSlotFlags >> i) & 1)
rfu_STC_removeLinkData(i, 1);
gRfuLinkStatus->parentChild = MODE_NEUTRAL;
}
@@ -277,25 +302,39 @@ u16 rfu_getRFUStatus(u8 *rfuState)
return 0;
}
+/*
+ * RFU Multiboot images are loaded into IWRAM
+ * struct RfuMbootLL
+ * {
+ * struct RfuLinkStatus status;
+ * u8 filler_B4[0x3C];
+ * char name[10];
+ * u16 checksum;
+ * }
+ * Returns 1 if the packet to inherit is malformed.
+ */
u16 rfu_MBOOT_CHILD_inheritanceLinkStatus(void)
{
const char *s1 = str_checkMbootLL;
char *s2 = (char *)0x30000F0;
u16 checksum;
- u16 *r2;
+ u16 *mb_buff_iwram_p;
u8 i;
+ // if (strcmp(s1, s2) != 0) return 1;
while (*s1 != '\0')
if (*s1++ != *s2++)
return 1;
- r2 = (u16 *)0x3000000;
+ mb_buff_iwram_p = (u16 *)0x3000000;
+
+ // The size of struct RfuLinkStatus is 180
checksum = 0;
- for (i = 0; i < 90; ++i)
- checksum += *r2++;
+ for (i = 0; i < 180/2; ++i)
+ checksum += *mb_buff_iwram_p++;
if (checksum != *(u16 *)0x30000FA)
return 1;
CpuCopy16((u16 *)0x3000000, gRfuLinkStatus, sizeof(struct RfuLinkStatus));
- gRfuStatic->flags |= 0x80;
+ gRfuStatic->flags |= 0x80; // mboot
return 0;
}
@@ -305,14 +344,14 @@ void rfu_REQ_stopMode(void)
if (REG_IME == 0)
{
- rfu_STC_REQ_callback(61, 6);
+ rfu_STC_REQ_callback(ID_STOP_MODE_REQ, 6);
gSTWIStatus->error = ERR_REQ_CMD_IME_DISABLE;
}
else
{
AgbRFU_SoftReset();
rfu_STC_clearAPIVariables();
- if (AgbRFU_checkID(8) == 0x8001)
+ if (AgbRFU_checkID(8) == RFU_ID)
{
timerReg = &REG_TMCNT(gSTWIStatus->timerSelect);
*timerReg = 0;
@@ -326,29 +365,29 @@ void rfu_REQ_stopMode(void)
else
{
REG_SIOCNT = SIO_MULTI_MODE;
- rfu_STC_REQ_callback(61, 0);
+ rfu_STC_REQ_callback(ID_STOP_MODE_REQ, 0);
}
}
}
-static void rfu_CB_stopMode(u8 a1, u16 reqResult)
+static void rfu_CB_stopMode(u8 reqCommand, u16 reqResult)
{
if (reqResult == 0)
REG_SIOCNT = SIO_MULTI_MODE;
- rfu_STC_REQ_callback(a1, reqResult);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
u32 rfu_REQBN_softReset_and_checkID(void)
{
- u32 r2;
+ u32 id;
if (REG_IME == 0)
return ERR_ID_CHECK_IME_DISABLE;
AgbRFU_SoftReset();
rfu_STC_clearAPIVariables();
- if ((r2 = AgbRFU_checkID(30)) == 0)
+ if ((id = AgbRFU_checkID(30)) == 0)
REG_SIOCNT = SIO_MULTI_MODE;
- return r2;
+ return id;
}
void rfu_REQ_reset(void)
@@ -357,11 +396,11 @@ void rfu_REQ_reset(void)
STWI_send_ResetREQ();
}
-static void rfu_CB_reset(u8 a1, u16 reqResult)
+static void rfu_CB_reset(u8 reqCommand, u16 reqResult)
{
if (reqResult == 0)
rfu_STC_clearAPIVariables();
- rfu_STC_REQ_callback(a1, reqResult);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
void rfu_REQ_configSystem(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer)
@@ -370,59 +409,59 @@ void rfu_REQ_configSystem(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer)
STWI_send_SystemConfigREQ((availSlotFlag & AVAIL_SLOT1) | 0x3C, maxMFrame, mcTimer);
if (mcTimer == 0)
{
- gRfuStatic->unk_1a = 1;
+ gRfuStatic->linkEmergencyLimit = 1;
}
else
{
u16 IMEBackup = REG_IME;
REG_IME = 0;
- gRfuStatic->unk_1a = Div(600, mcTimer);
+ gRfuStatic->linkEmergencyLimit = Div(600, mcTimer);
REG_IME = IMEBackup;
}
}
void rfu_REQ_configGameData(u8 mbootFlag, u16 serialNo, const u8 *gname, const u8 *uname)
{
- u8 sp[16];
+ u8 packet[16];
u8 i;
- u8 r3;
+ u8 check_sum;
const u8 *gnameBackup = gname;
const u8 *unameBackup;
- sp[0] = serialNo;
- sp[1] = serialNo >> 8;
+ packet[0] = serialNo;
+ packet[1] = serialNo >> 8;
if (mbootFlag != 0)
- sp[1] = (serialNo >> 8) | 0x80;
+ packet[1] = (serialNo >> 8) | 0x80;
for (i = 2; i < 15; ++i)
- sp[i] = *gname++;
- r3 = 0;
+ packet[i] = *gname++;
+ check_sum = 0;
unameBackup = uname;
for (i = 0; i < 8; ++i)
{
- r3 += *unameBackup++;
- r3 += *gnameBackup++;
+ check_sum += *unameBackup++;
+ check_sum += *gnameBackup++;
}
- sp[15] = ~r3;
+ packet[15] = ~check_sum;
if (mbootFlag != 0)
- sp[14] = 0;
+ packet[14] = 0;
STWI_set_Callback_M(rfu_CB_configGameData);
- STWI_send_GameConfigREQ(sp, uname);
+ STWI_send_GameConfigREQ(packet, uname);
}
-static void rfu_CB_configGameData(u8 ip, u16 r7)
+static void rfu_CB_configGameData(u8 reqCommand, u16 reqResult)
{
- s32 r2, r3;
- u8 *r4;
+ s32 serialNo;
+ u8 *gname_uname_p;
u8 i;
- u8 *r1;
+ u8 *packet_p;
- if (r7 == 0)
+ if (reqResult == 0)
{
- r1 = gSTWIStatus->txPacket->rfuPacket8.data;
- r2 = gRfuLinkStatus->my.serialNo = r1[4];
- gRfuLinkStatus->my.serialNo = (r1[5] << 8) | r2;
- r4 = &r1[6];
+ packet_p = gSTWIStatus->txPacket->rfuPacket8.data;
+ serialNo = gRfuLinkStatus->my.serialNo = packet_p[4];
+ gRfuLinkStatus->my.serialNo = (packet_p[5] << 8) | serialNo;
+ gname_uname_p = &packet_p[6];
if (gRfuLinkStatus->my.serialNo & 0x8000)
{
gRfuLinkStatus->my.serialNo = gRfuLinkStatus->my.serialNo ^ 0x8000;
@@ -433,47 +472,47 @@ static void rfu_CB_configGameData(u8 ip, u16 r7)
gRfuLinkStatus->my.mbootFlag = 0;
}
for (i = 0; i < RFU_GAME_NAME_LENGTH; ++i)
- gRfuLinkStatus->my.gname[i] = *r4++;
- ++r4;
+ gRfuLinkStatus->my.gname[i] = *gname_uname_p++;
+ ++gname_uname_p;
for (i = 0; i < RFU_USER_NAME_LENGTH; ++i)
- gRfuLinkStatus->my.uname[i] = *r4++;
+ gRfuLinkStatus->my.uname[i] = *gname_uname_p++;
}
- rfu_STC_REQ_callback(ip, r7);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
void rfu_REQ_startSearchChild(void)
{
- u16 r1;
-
+ u16 result;
+
STWI_set_Callback_M(rfu_CB_defaultCallback);
STWI_send_SystemStatusREQ();
- r1 = STWI_poll_CommandEnd();
- if (r1 == 0)
+ result = STWI_poll_CommandEnd();
+ if (result == 0)
{
if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0)
- rfu_STC_clearLinkStatus(1);
+ rfu_STC_clearLinkStatus(MODE_PARENT);
}
else
{
- rfu_STC_REQ_callback(25, r1);
+ rfu_STC_REQ_callback(ID_SC_START_REQ, result);
}
STWI_set_Callback_M(rfu_CB_startSearchChild);
STWI_send_SC_StartREQ();
}
-static void rfu_CB_startSearchChild(u8 r3, u16 reqResult)
+static void rfu_CB_startSearchChild(u8 reqCommand, u16 reqResult)
{
if (reqResult == 0)
gRfuStatic->SCStartFlag = 1;
- rfu_STC_REQ_callback(r3, reqResult);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
-static void rfu_STC_clearLinkStatus(u8 r4)
+static void rfu_STC_clearLinkStatus(u8 parentChild)
{
u8 i;
-
+
rfu_clearAllSlot();
- if (r4 != 0)
+ if (parentChild != MODE_CHILD)
{
CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner));
gRfuLinkStatus->findParentCount = 0;
@@ -498,11 +537,11 @@ void rfu_REQ_endSearchChild(void)
STWI_send_SC_EndREQ();
}
-static void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult)
+static void rfu_CB_pollAndEndSearchChild(u8 reqCommand, u16 reqResult)
{
if (reqResult == 0)
rfu_STC_readChildList();
- if (r4 == 26)
+ if (reqCommand == ID_SC_POLL_REQ)
{
if (gRfuLinkStatus->my.id == 0)
{
@@ -512,60 +551,60 @@ static void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult)
gRfuLinkStatus->my.id = *(u16 *)&gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0];
}
}
- else if (r4 == 27)
+ else if (reqCommand == ID_SC_END_REQ)
{
if (gRfuLinkStatus->parentChild == MODE_NEUTRAL)
gRfuLinkStatus->my.id = 0;
gRfuStatic->SCStartFlag = 0;
}
- rfu_STC_REQ_callback(r4, reqResult);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
static void rfu_STC_readChildList(void)
{
- u32 r5;
- u8 r8 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1];
- u8 *r4;
+ u32 stwiParam;
+ u8 numSlots = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1];
+ u8 *data_p;
u8 i;
- u8 sp[4];
- u8 r2;
+ u8 true_slots[RFU_CHILD_MAX];
+ u8 bm_slot_id;
- if (r8 != 0)
+ if (numSlots != 0)
{
- r5 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0];
+ stwiParam = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0];
STWI_set_Callback_M(rfu_CB_defaultCallback);
STWI_send_LinkStatusREQ();
if (STWI_poll_CommandEnd() == 0)
{
- r4 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
- for (i = 0; i < NELEMS(sp); ++i)
- sp[i] = *r4++;
+ data_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
+ true_slots[i] = *data_p++;
}
- gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] = r5;
+ gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] = stwiParam;
}
- for (r4 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
- r8 != 0;
- r4 += 4)
+ for (data_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
+ numSlots != 0;
+ data_p += 4)
{
- r2 = r4[2];
- if (r2 < RFU_CHILD_MAX && !((gRfuLinkStatus->connSlotFlag >> r2) & 1) && !((gRfuLinkStatus->linkLossSlotFlag >> r2) & 1))
+ bm_slot_id = data_p[2];
+ if (bm_slot_id < RFU_CHILD_MAX && !((gRfuLinkStatus->connSlotFlag >> bm_slot_id) & 1) && !((gRfuLinkStatus->linkLossSlotFlag >> bm_slot_id) & 1))
{
- if (sp[r2] != 0)
- ++gRfuStatic->lsFixedCount[r2];
- if (gRfuStatic->lsFixedCount[r2] >= 4)
+ if (true_slots[bm_slot_id] != 0)
+ ++gRfuStatic->lsFixedCount[bm_slot_id];
+ if (gRfuStatic->lsFixedCount[bm_slot_id] >= 4)
{
- gRfuStatic->lsFixedCount[r2] = 0;
- gRfuLinkStatus->strength[r2] = 0xFF;
- gRfuLinkStatus->connSlotFlag |= 1 << r2;
+ gRfuStatic->lsFixedCount[bm_slot_id] = 0;
+ gRfuLinkStatus->strength[bm_slot_id] = 255;
+ gRfuLinkStatus->connSlotFlag |= 1 << bm_slot_id;
++gRfuLinkStatus->connCount;
- gRfuLinkStatus->partner[r2].id = *(u16 *)r4;
- gRfuLinkStatus->partner[r2].slot = r2;
+ gRfuLinkStatus->partner[bm_slot_id].id = *(u16 *)data_p;
+ gRfuLinkStatus->partner[bm_slot_id].slot = bm_slot_id;
gRfuLinkStatus->parentChild = MODE_PARENT;
gRfuStatic->flags &= 0x7F;
- gRfuStatic->cidBak[r2] = gRfuLinkStatus->partner[r2].id;
+ gRfuStatic->cidBak[bm_slot_id] = gRfuLinkStatus->partner[bm_slot_id].id;
}
}
- --r8;
+ --numSlots;
}
}
@@ -575,11 +614,11 @@ void rfu_REQ_startSearchParent(void)
STWI_send_SP_StartREQ();
}
-static void rfu_CB_startSearchParent(u8 r5, u16 reqResult)
+static void rfu_CB_startSearchParent(u8 reqCommand, u16 reqResult)
{
if (reqResult == 0)
- rfu_STC_clearLinkStatus(0);
- rfu_STC_REQ_callback(r5, reqResult);
+ rfu_STC_clearLinkStatus(MODE_CHILD);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
void rfu_REQ_pollSearchParent(void)
@@ -588,11 +627,11 @@ void rfu_REQ_pollSearchParent(void)
STWI_send_SP_PollingREQ();
}
-static void rfu_CB_pollSearchParent(u8 r5, u16 reqResult)
+static void rfu_CB_pollSearchParent(u8 reqCommand, u16 reqResult)
{
if (reqResult == 0)
rfu_STC_readParentCandidateList();
- rfu_STC_REQ_callback(r5, reqResult);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
void rfu_REQ_endSearchParent(void)
@@ -603,47 +642,47 @@ void rfu_REQ_endSearchParent(void)
static void rfu_STC_readParentCandidateList(void)
{
- u8 r7, r6, r5, r4, r3;
- u8 *r1, *r2;
- struct RfuTgtData *r4_;
+ u8 numSlots, i, check_sum, my_check_sum, j;
+ u8 *uname_p, *packet_p;
+ struct RfuTgtData *target;
CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner));
- r2 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0];
- r7 = r2[1];
- r2 += 4;
+ packet_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0];
+ numSlots = packet_p[1];
+ packet_p += 4;
gRfuLinkStatus->findParentCount = 0;
- for (r6 = 0; r6 < 4 && r7 != 0; ++r6)
- {
- r7 -= 7;
- r1 = r2 + 6;
- r2 += 19;
- r5 = ~*r2;
- ++r2;
- r4 = 0;
- for (r3 = 0; r3 < 8; ++r3)
+ for (i = 0; i < RFU_CHILD_MAX && numSlots != 0; ++i)
+ {
+ numSlots -= 7;
+ uname_p = packet_p + 6;
+ packet_p += 19;
+ check_sum = ~*packet_p;
+ ++packet_p;
+ my_check_sum = 0;
+ for (j = 0; j < 8; ++j)
{
- r4 += *r2++;
- r4 += *r1++;
+ my_check_sum += *packet_p++;
+ my_check_sum += *uname_p++;
}
- if (r4 == r5)
+ if (my_check_sum == check_sum)
{
- r2 -= 28;
- r4_ = &gRfuLinkStatus->partner[gRfuLinkStatus->findParentCount];
- r4_->id = *(u16 *)r2;
- r2 += 2;
- r4_->slot = *r2;
- r2 += 2;
- r4_->serialNo = *(u16 *)r2 & 0x7FFF;
- if (*(u16 *)r2 & 0x8000)
- r4_->mbootFlag = 1;
+ packet_p -= 28;
+ target = &gRfuLinkStatus->partner[gRfuLinkStatus->findParentCount];
+ target->id = *(u16 *)packet_p;
+ packet_p += 2;
+ target->slot = *packet_p;
+ packet_p += 2;
+ target->serialNo = *(u16 *)packet_p & 0x7FFF;
+ if (*(u16 *)packet_p & 0x8000)
+ target->mbootFlag = 1;
else
- r4_->mbootFlag = 0;
- r2 += 2;
- for (r3 = 0; r3 < RFU_GAME_NAME_LENGTH; ++r3)
- r4_->gname[r3] = *r2++;
- ++r2;
- for (r3 = 0; r3 < RFU_USER_NAME_LENGTH; ++r3)
- r4_->uname[r3] = *r2++;
+ target->mbootFlag = 0;
+ packet_p += 2;
+ for (j = 0; j < RFU_GAME_NAME_LENGTH; ++j)
+ target->gname[j] = *packet_p++;
+ ++packet_p;
+ for (j = 0; j < RFU_USER_NAME_LENGTH; ++j)
+ target->uname[j] = *packet_p++;
++gRfuLinkStatus->findParentCount;
}
}
@@ -651,13 +690,13 @@ static void rfu_STC_readParentCandidateList(void)
void rfu_REQ_startConnectParent(u16 pid)
{
- u16 r3 = 0;
+ u16 result = 0;
u8 i;
for (i = 0; i < RFU_CHILD_MAX && gRfuLinkStatus->partner[i].id != pid; ++i)
;
- if (i == 4)
- r3 = 256;
- if (r3 == 0)
+ if (i == RFU_CHILD_MAX)
+ result = ERR_PID_NOT_FOUND;
+ if (result == 0)
{
gRfuStatic->tryPid = pid;
STWI_set_Callback_M(rfu_STC_REQ_callback);
@@ -665,7 +704,7 @@ void rfu_REQ_startConnectParent(u16 pid)
}
else
{
- rfu_STC_REQ_callback(31, r3);
+ rfu_STC_REQ_callback(ID_CP_START_REQ, result);
}
}
@@ -675,70 +714,69 @@ void rfu_REQ_pollConnectParent(void)
STWI_send_CP_PollingREQ();
}
-static void rfu_CB_pollConnectParent(u8 sp24, u16 sp28)
+static void rfu_CB_pollConnectParent(u8 reqCommand, u16 reqResult)
{
u16 id;
u8 slot;
- u8 r2, r5;
- struct RfuTgtData *r9;
- struct RfuTgtData sp;
+ u8 bm_slot_flag, i;
+ struct RfuTgtData *target_p;
+ struct RfuTgtData target_local;
- if (sp28 == 0)
+ if (reqResult == 0)
{
id = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0];
slot = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[6];
if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0)
{
- r2 = 1 << slot;
- if (!(r2 & gRfuLinkStatus->connSlotFlag))
+ bm_slot_flag = 1 << slot;
+ if (!(bm_slot_flag & gRfuLinkStatus->connSlotFlag))
{
- gRfuLinkStatus->connSlotFlag |= r2;
- gRfuLinkStatus->linkLossSlotFlag &= ~r2;
+ gRfuLinkStatus->connSlotFlag |= bm_slot_flag;
+ gRfuLinkStatus->linkLossSlotFlag &= ~bm_slot_flag;
gRfuLinkStatus->my.id = id;
++gRfuLinkStatus->connCount;
gRfuLinkStatus->parentChild = MODE_CHILD;
gRfuStatic->flags |= 0x80;
- for (r5 = 0; r5 < RFU_CHILD_MAX; ++r5)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- if (gRfuLinkStatus->partner[r5].id == gRfuStatic->tryPid)
+ if (gRfuLinkStatus->partner[i].id == gRfuStatic->tryPid)
{
if (gRfuLinkStatus->findParentCount != 0)
{
- r9 = &sp;
- CpuCopy16(&gRfuLinkStatus->partner[r5], &sp, sizeof(struct RfuTgtData));
+ target_p = &target_local;
+ CpuCopy16(&gRfuLinkStatus->partner[i], &target_local, sizeof(struct RfuTgtData));
CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner));
gRfuLinkStatus->findParentCount = 0;
}
else
{
- r9 = &gRfuLinkStatus->partner[r5];
+ target_p = &gRfuLinkStatus->partner[i];
}
break;
}
}
- if (r5 < RFU_CHILD_MAX)
+ if (i < RFU_CHILD_MAX)
{
- CpuCopy16(r9, &gRfuLinkStatus->partner[slot], sizeof(struct RfuTgtData));
+ CpuCopy16(target_p, &gRfuLinkStatus->partner[slot], sizeof(struct RfuTgtData));
gRfuLinkStatus->partner[slot].slot = slot;
}
}
}
}
- rfu_STC_REQ_callback(sp24, sp28);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
u16 rfu_getConnectParentStatus(u8 *status, u8 *connectSlotNo)
{
- u8 r0, *r2;
+ u8 *packet_p;
*status = 0xFF;
- r2 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data;
- r0 = r2[0] + 96;
- if (r0 <= 1)
+ packet_p = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data;
+ if (packet_p[0] == 0xa0 || packet_p[0] == 0xa1)
{
- r2 += 6;
- *connectSlotNo = r2[0];
- *status = r2[1];
+ packet_p += 6;
+ *connectSlotNo = packet_p[0];
+ *status = packet_p[1];
return 0;
}
return ERR_REQ_CMD_ID;
@@ -754,28 +792,28 @@ void rfu_REQ_endConnectParent(void)
u16 rfu_syncVBlank(void)
{
- u8 r3, r4;
- s32 r5;
+ u8 masterSlave, i;
+ s32 bmSlotFlag;
rfu_NI_checkCommFailCounter();
if (gRfuLinkStatus->parentChild == MODE_NEUTRAL)
return 0;
if (gRfuStatic->nowWatchInterval != 0)
--gRfuStatic->nowWatchInterval;
- r3 = rfu_getMasterSlave();
+ masterSlave = rfu_getMasterSlave();
if (!(gRfuStatic->flags & 2))
{
- if (r3 == 0)
+ if (masterSlave == AGB_CLK_SLAVE)
{
gRfuStatic->flags |= 4;
gRfuStatic->watchdogTimer = 360;
}
}
- else if (r3 != 0)
+ else if (masterSlave != AGB_CLK_SLAVE)
{
gRfuStatic->flags &= 0xFB;
}
- if (r3 != 0)
+ if (masterSlave != AGB_CLK_SLAVE)
gRfuStatic->flags &= 0xFD;
else
gRfuStatic->flags |= 2;
@@ -784,10 +822,10 @@ u16 rfu_syncVBlank(void)
if (gRfuStatic->watchdogTimer == 0)
{
gRfuStatic->flags &= 0xFB;
- r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
- for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4)
- if ((r5 >> r4) & 1)
- rfu_STC_removeLinkData(r4, 1);
+ bmSlotFlag = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
+ if ((bmSlotFlag >> i) & 1)
+ rfu_STC_removeLinkData(i, 1);
gRfuLinkStatus->parentChild = MODE_NEUTRAL;
return 1;
}
@@ -797,13 +835,13 @@ u16 rfu_syncVBlank(void)
u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason, u8 *parentBmLinkRecoverySlot)
{
- u8 sp08 = 0;
- u8 sp0C = 0;
+ u8 reasonMaybe = 0;
+ u8 reqResult = 0;
u8 i;
- s32 sp10, sp14;
- u8 *r2;
- u8 r9, r6, r3, connSlotFlag, r0;
-
+ s32 stwiCommand, stwiParam;
+ u8 *packet_p;
+ u8 to_req_disconnect, newLinkLossFlag, num_packets, connSlotFlag, to_disconnect;
+
*bmLinkLossSlot = 0;
*linkLossReason = REASON_DISCONNECTED;
*parentBmLinkRecoverySlot = 0;
@@ -814,25 +852,25 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
if (gRfuStatic->nowWatchInterval == 0)
{
gRfuStatic->nowWatchInterval = gRfuLinkStatus->watchInterval;
- sp08 = 1;
+ reasonMaybe = 1;
}
- if ((u8)reqCommandId == 41)
+ if ((u8)reqCommandId == ID_DISCONNECTED_AND_CHANGE_REQ)
{
- u8 *r1 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data;
-
- *bmLinkLossSlot = r1[4];
- *linkLossReason = r1[5];
+ u8 *packet_p_2 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data;
+
+ *bmLinkLossSlot = packet_p_2[4];
+ *linkLossReason = packet_p_2[5];
if (*linkLossReason == REASON_LINK_LOSS)
*bmLinkLossSlot = gRfuLinkStatus->connSlotFlag;
- sp08 = 2;
+ reasonMaybe = 2;
}
else
{
- if (reqCommandId == 310)
+ if (reqCommandId == 0x0136)
{
- r6 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[5];
- r6 ^= gRfuLinkStatus->connSlotFlag;
- *bmLinkLossSlot = r6 & gRfuLinkStatus->connSlotFlag;
+ newLinkLossFlag = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[5];
+ newLinkLossFlag ^= gRfuLinkStatus->connSlotFlag;
+ *bmLinkLossSlot = newLinkLossFlag & gRfuLinkStatus->connSlotFlag;
*linkLossReason = REASON_LINK_LOSS;
for (i = 0; i < RFU_CHILD_MAX; ++i)
{
@@ -843,33 +881,33 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
}
}
}
- if (sp08 == 0)
+ if (reasonMaybe == 0)
return 0;
}
- sp10 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command;
- sp14 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0];
+ stwiCommand = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command;
+ stwiParam = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0];
STWI_set_Callback_M(rfu_CB_defaultCallback);
STWI_send_LinkStatusREQ();
- sp0C = STWI_poll_CommandEnd();
- if (sp0C == 0)
+ reqResult = STWI_poll_CommandEnd();
+ if (reqResult == 0)
{
- r2 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
+ packet_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
for (i = 0; i < RFU_CHILD_MAX; ++i)
- gRfuLinkStatus->strength[i] = *r2++;
- r9 = 0;
+ gRfuLinkStatus->strength[i] = *packet_p++;
+ to_req_disconnect = 0;
i = 0;
}
else
{
- rfu_STC_REQ_callback(17, sp0C);
- return sp0C;
+ rfu_STC_REQ_callback(ID_LINK_STATUS_REQ, reqResult);
+ return reqResult;
}
for (; i < RFU_CHILD_MAX; ++i)
{
- r6 = 1 << i;
- if (sp0C == 0)
+ newLinkLossFlag = 1 << i;
+ if (reqResult == 0)
{
- if (sp08 == 1 && (gRfuLinkStatus->connSlotFlag & r6))
+ if (reasonMaybe == 1 && (gRfuLinkStatus->connSlotFlag & newLinkLossFlag))
{
if (gRfuLinkStatus->strength[i] == 0)
{
@@ -878,8 +916,8 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
++gRfuStatic->linkEmergencyFlag[i];
if (gRfuStatic->linkEmergencyFlag[i] > 3)
{
- *bmLinkLossSlot |= r6;
- *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS?
+ *bmLinkLossSlot |= newLinkLossFlag;
+ *linkLossReason = REASON_LINK_LOSS;
}
}
else
@@ -889,18 +927,18 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
{
if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0)
{
- *bmLinkLossSlot |= r6;
- *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS?
+ *bmLinkLossSlot |= newLinkLossFlag;
+ *linkLossReason = REASON_LINK_LOSS;
}
else
{
- if (++gRfuStatic->linkEmergencyFlag[i] > gRfuStatic->unk_1a)
+ if (++gRfuStatic->linkEmergencyFlag[i] > gRfuStatic->linkEmergencyLimit)
{
gRfuStatic->linkEmergencyFlag[i] = 0;
STWI_send_DisconnectREQ(gRfuLinkStatus->connSlotFlag);
STWI_poll_CommandEnd();
- *bmLinkLossSlot |= r6;
- *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS?
+ *bmLinkLossSlot |= newLinkLossFlag;
+ *linkLossReason = REASON_LINK_LOSS;
}
}
}
@@ -908,18 +946,18 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
}
else
{
- gRfuStatic->linkEmergencyFlag[i] = sp0C; // why not directly use 0?
+ gRfuStatic->linkEmergencyFlag[i] = 0;
}
}
if (gRfuLinkStatus->parentChild == MODE_PARENT && gRfuLinkStatus->strength[i] != 0)
{
- if (r6 & gRfuLinkStatus->linkLossSlotFlag)
+ if (newLinkLossFlag & gRfuLinkStatus->linkLossSlotFlag)
{
if (gRfuLinkStatus->strength[i] > 10)
{
- *parentBmLinkRecoverySlot |= r6;
- gRfuLinkStatus->connSlotFlag |= r6;
- gRfuLinkStatus->linkLossSlotFlag &= ~r6;
+ *parentBmLinkRecoverySlot |= newLinkLossFlag;
+ gRfuLinkStatus->connSlotFlag |= newLinkLossFlag;
+ gRfuLinkStatus->linkLossSlotFlag &= ~newLinkLossFlag;
++gRfuLinkStatus->connCount;
gRfuStatic->linkEmergencyFlag[i] = 0;
}
@@ -930,19 +968,19 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
}
else
{
- if (!((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & r6))
+ if (!((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & newLinkLossFlag))
{
STWI_send_SlotStatusREQ();
STWI_poll_CommandEnd();
- r2 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data;
- r3 = r2[1] - 1;
- for (r2 += 8; r3 != 0; r2 += 4, --r3)
+ packet_p = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data;
+ num_packets = packet_p[1] - 1;
+ for (packet_p += 8; num_packets != 0; packet_p += 4, --num_packets)
{
- u16 r4 = *(u16 *)r2;
+ u16 cid = *(u16 *)packet_p;
- if (r2[2] == i && r4 == gRfuStatic->cidBak[i])
+ if (packet_p[2] == i && cid == gRfuStatic->cidBak[i])
{
- r9 |= 1 << i;
+ to_req_disconnect |= 1 << i;
break;
}
}
@@ -951,46 +989,46 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
}
}
connSlotFlag = gRfuLinkStatus->connSlotFlag;
- r0 = *bmLinkLossSlot;
- r0 &= connSlotFlag;
- if (r6 & r0)
+ to_disconnect = *bmLinkLossSlot;
+ to_disconnect &= connSlotFlag;
+ if (newLinkLossFlag & to_disconnect)
rfu_STC_removeLinkData(i, 0);
}
- if (r9 != 0)
+ if (to_req_disconnect != 0)
{
- STWI_send_DisconnectREQ(r9);
+ STWI_send_DisconnectREQ(to_req_disconnect);
STWI_poll_CommandEnd();
}
// equivalent to:
- // gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command = sp10;
- *(u32 *)gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data = sp10;
- gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] = sp14;
+ // gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command = stwiCommand;
+ *(u32 *)gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data = stwiCommand;
+ gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] = stwiParam;
return 0;
}
-static void rfu_STC_removeLinkData(u8 r7, u8 r12)
+static void rfu_STC_removeLinkData(u8 bmConnectedPartnerId, u8 bmDisconnect)
{
- u8 r5 = 1 << r7;
- s32 r6;
+ u8 bmLinkLossFlag = 1 << bmConnectedPartnerId;
+ s32 bmLinkRetainedFlag;
- if ((gRfuLinkStatus->connSlotFlag & r5) && gRfuLinkStatus->connCount != 0)
+ if ((gRfuLinkStatus->connSlotFlag & bmLinkLossFlag) && gRfuLinkStatus->connCount != 0)
--gRfuLinkStatus->connCount;
- gRfuLinkStatus->connSlotFlag &= r6 = ~r5;
- gRfuLinkStatus->linkLossSlotFlag |= r5;
- if ((*(u32 *)gRfuLinkStatus & 0xFF00FF) == 0)
+ gRfuLinkStatus->connSlotFlag &= bmLinkRetainedFlag = ~bmLinkLossFlag;
+ gRfuLinkStatus->linkLossSlotFlag |= bmLinkLossFlag;
+ if (gRfuLinkStatus->parentChild == MODE_CHILD && gRfuLinkStatus->connSlotFlag == 0)
gRfuLinkStatus->parentChild = MODE_NEUTRAL;
- if (r12 != 0)
+ if (bmDisconnect)
{
- CpuFill16(0, &gRfuLinkStatus->partner[r7], sizeof(struct RfuTgtData));
- gRfuLinkStatus->linkLossSlotFlag &= r6;
- gRfuLinkStatus->getNameFlag &= r6;
- gRfuLinkStatus->strength[r7] = 0;
+ CpuFill16(0, &gRfuLinkStatus->partner[bmConnectedPartnerId], sizeof(struct RfuTgtData));
+ gRfuLinkStatus->linkLossSlotFlag &= bmLinkRetainedFlag;
+ gRfuLinkStatus->getNameFlag &= bmLinkRetainedFlag;
+ gRfuLinkStatus->strength[bmConnectedPartnerId] = 0;
}
}
void rfu_REQ_disconnect(u8 bmDisconnectSlot)
{
- u16 r1;
+ u16 result;
if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & bmDisconnectSlot)
{
@@ -1003,9 +1041,9 @@ void rfu_REQ_disconnect(u8 bmDisconnectSlot)
else if (gRfuStatic->SCStartFlag
&& (STWI_set_Callback_M(rfu_CB_defaultCallback),
STWI_send_SC_EndREQ(),
- (r1 = STWI_poll_CommandEnd()) != 0))
+ (result = STWI_poll_CommandEnd()) != 0))
{
- rfu_STC_REQ_callback(27, r1);
+ rfu_STC_REQ_callback(ID_SC_END_REQ, result);
}
else
{
@@ -1015,38 +1053,38 @@ void rfu_REQ_disconnect(u8 bmDisconnectSlot)
}
}
-static void rfu_CB_disconnect(u8 r6, u16 r5)
+static void rfu_CB_disconnect(u8 reqCommand, u16 reqResult)
{
- u8 r4, r0;
+ u8 i, bm_slot_flag;
- if (r5 == 3 && gRfuLinkStatus->parentChild == MODE_CHILD)
+ if (reqResult == 3 && gRfuLinkStatus->parentChild == MODE_CHILD)
{
STWI_set_Callback_M(rfu_CB_defaultCallback);
STWI_send_SystemStatusREQ();
if (STWI_poll_CommandEnd() == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0)
- r5 = 0;
+ reqResult = 0;
}
gRfuStatic->recoveryBmSlot &= gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8] = gRfuStatic->recoveryBmSlot;
- if (r5 == 0)
+ if (reqResult == 0)
{
- for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- r0 = 1 << r4;
- if (r0 & gRfuStatic->recoveryBmSlot)
- rfu_STC_removeLinkData(r4, 1);
+ bm_slot_flag = 1 << i;
+ if (bm_slot_flag & gRfuStatic->recoveryBmSlot)
+ rfu_STC_removeLinkData(i, 1);
}
}
if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) == 0)
gRfuLinkStatus->parentChild = MODE_NEUTRAL;
- rfu_STC_REQ_callback(r6, r5);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
if (gRfuStatic->SCStartFlag)
{
STWI_set_Callback_M(rfu_CB_defaultCallback);
STWI_send_SC_StartREQ();
- r5 = STWI_poll_CommandEnd();
- if (r5 != 0)
- rfu_STC_REQ_callback(25, r5);
+ reqResult = STWI_poll_CommandEnd();
+ if (reqResult != 0)
+ rfu_STC_REQ_callback(ID_SC_START_REQ, reqResult);
}
}
@@ -1068,38 +1106,35 @@ void rfu_REQ_CHILD_pollConnectRecovery(void)
STWI_send_CPR_PollingREQ();
}
-static void rfu_CB_CHILD_pollConnectRecovery(u8 r8, u16 r7)
+static void rfu_CB_CHILD_pollConnectRecovery(u8 reqCommand, u16 reqResult)
{
- u8 r3, r4;
- struct RfuLinkStatus *r2;
+ u8 bm_slot_flag, i;
+ struct RfuLinkStatus *rfuLinkStatus;
- if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] == 0 && gRfuStatic->recoveryBmSlot)
+ if (reqResult == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] == 0 && gRfuStatic->recoveryBmSlot)
{
gRfuLinkStatus->parentChild = MODE_CHILD;
- for (r4 = 0; r4 < NELEMS(gRfuStatic->linkEmergencyFlag); ++r4)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- r3 = 1 << r4;
- r2 = gRfuLinkStatus; // ???
- if (gRfuStatic->recoveryBmSlot & r3 & r2->linkLossSlotFlag)
+ bm_slot_flag = 1 << i;
+ rfuLinkStatus = gRfuLinkStatus; // ???
+ if (gRfuStatic->recoveryBmSlot & bm_slot_flag & rfuLinkStatus->linkLossSlotFlag)
{
- gRfuLinkStatus->connSlotFlag |= r3;
- gRfuLinkStatus->linkLossSlotFlag &= ~r3;
+ gRfuLinkStatus->connSlotFlag |= bm_slot_flag;
+ gRfuLinkStatus->linkLossSlotFlag &= ~bm_slot_flag;
++gRfuLinkStatus->connCount;
- gRfuStatic->linkEmergencyFlag[r4] = 0;
+ gRfuStatic->linkEmergencyFlag[i] = 0;
}
}
gRfuStatic->recoveryBmSlot = 0;
}
- rfu_STC_REQ_callback(r8, r7);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
u16 rfu_CHILD_getConnectRecoveryStatus(u8 *status)
{
- u8 r0;
-
*status = 0xFF;
- r0 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] + 77;
- if (r0 <= 1)
+ if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] == 0xB3 || gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] == 0xB4)
{
*status = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
return 0;
@@ -1127,14 +1162,14 @@ static void rfu_STC_fastCopy(const u8 **src_p, u8 **dst_p, s32 size)
void rfu_REQ_changeMasterSlave(void)
{
- if (STWI_read_status(1) == 1)
+ if (STWI_read_status(1) == AGB_CLK_MASTER)
{
STWI_set_Callback_M(rfu_STC_REQ_callback);
STWI_send_MS_ChangeREQ();
}
else
{
- rfu_STC_REQ_callback(39, 0);
+ rfu_STC_REQ_callback(ID_MS_CHANGE_REQ, 0);
}
}
@@ -1144,11 +1179,11 @@ bool8 rfu_getMasterSlave(void)
if (masterSlave == AGB_CLK_MASTER)
{
- if (gSTWIStatus->unk_2c)
+ if (gSTWIStatus->sending)
{
- if (gSTWIStatus->reqActiveCommand == 39
- || gSTWIStatus->reqActiveCommand == 37
- || gSTWIStatus->reqActiveCommand == 55)
+ if (gSTWIStatus->reqActiveCommand == ID_MS_CHANGE_REQ
+ || gSTWIStatus->reqActiveCommand == ID_DATA_TX_AND_CHANGE_REQ
+ || gSTWIStatus->reqActiveCommand == ID_RESUME_RETRANSMIT_AND_CHANGE_REQ)
masterSlave = AGB_CLK_SLAVE;
}
}
@@ -1159,7 +1194,7 @@ void rfu_clearAllSlot(void)
{
u16 i;
u16 IMEBackup = REG_IME;
-
+
REG_IME = 0;
for (i = 0; i < RFU_CHILD_MAX; ++i)
{
@@ -1175,87 +1210,87 @@ void rfu_clearAllSlot(void)
REG_IME = IMEBackup;
}
-static void rfu_STC_releaseFrame(u8 r5, u8 r3, struct NIComm *r4)
+static void rfu_STC_releaseFrame(u8 bm_slot_id, u8 send_recv, struct NIComm *NI_comm)
{
if (!(gRfuStatic->flags & 0x80))
{
- if (r3 == 0)
- gRfuLinkStatus->remainLLFrameSizeParent += r4->payloadSize;
+ if (send_recv == 0)
+ gRfuLinkStatus->remainLLFrameSizeParent += NI_comm->payloadSize;
gRfuLinkStatus->remainLLFrameSizeParent += 3;
}
else
{
- if (r3 == 0)
- gRfuLinkStatus->remainLLFrameSizeChild[r5] += r4->payloadSize;
- gRfuLinkStatus->remainLLFrameSizeChild[r5] += 2;
+ if (send_recv == 0)
+ gRfuLinkStatus->remainLLFrameSizeChild[bm_slot_id] += NI_comm->payloadSize;
+ gRfuLinkStatus->remainLLFrameSizeChild[bm_slot_id] += 2;
}
}
u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex)
{
- u16 r10, r3, r1;
- struct NIComm *r4;
+ u16 imeBak, send_recv, i;
+ struct NIComm *NI_comm;
if (slotStatusIndex >= RFU_CHILD_MAX)
return ERR_SLOT_NO;
if (!(connTypeFlag & (TYPE_UNI_SEND | TYPE_UNI_RECV | TYPE_NI_SEND | TYPE_NI_RECV)))
return ERR_COMM_TYPE;
- r10 = REG_IME;
+ imeBak = REG_IME;
REG_IME = 0;
if (connTypeFlag & (TYPE_NI_SEND | TYPE_NI_RECV))
{
- for (r3 = 0; r3 < 2; ++r3)
+ for (send_recv = 0; send_recv < 2; ++send_recv)
{
- r4 = NULL;
- if (r3 == 0)
+ NI_comm = NULL;
+ if (send_recv == 0)
{
if (connTypeFlag & TYPE_NI_SEND)
{
- r4 = &gRfuSlotStatusNI[slotStatusIndex]->send;
- gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlotOrg;
+ NI_comm = &gRfuSlotStatusNI[slotStatusIndex]->send;
+ gRfuLinkStatus->sendSlotNIFlag &= ~NI_comm->bmSlotOrg;
}
}
else
{
if (connTypeFlag & TYPE_NI_RECV)
{
- r4 = &gRfuSlotStatusNI[slotStatusIndex]->recv;
+ NI_comm = &gRfuSlotStatusNI[slotStatusIndex]->recv;
gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex);
}
}
- if (r4 != NULL)
+ if (NI_comm != NULL)
{
- if (r4->state & SLOT_BUSY_FLAG)
+ if (NI_comm->state & SLOT_BUSY_FLAG)
{
- rfu_STC_releaseFrame(slotStatusIndex, r3, r4);
- for (r1 = 0; r1 < RFU_CHILD_MAX; ++r1)
- if ((r4->bmSlotOrg >> r1) & 1)
- r4->failCounter = 0;
+ rfu_STC_releaseFrame(slotStatusIndex, send_recv, NI_comm);
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
+ if ((NI_comm->bmSlotOrg >> i) & 1)
+ NI_comm->failCounter = 0;
}
- CpuFill16(0, r4, sizeof(struct NIComm));
+ CpuFill16(0, NI_comm, sizeof(struct NIComm));
}
}
}
if (connTypeFlag & TYPE_UNI_SEND)
{
- struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[slotStatusIndex];
+ struct RfuSlotStatusUNI *slotStatusUNI = gRfuSlotStatusUNI[slotStatusIndex];
- if (r3->send.state & SLOT_BUSY_FLAG)
+ if (slotStatusUNI->send.state & SLOT_BUSY_FLAG)
{
if (!(gRfuStatic->flags & 0x80))
- gRfuLinkStatus->remainLLFrameSizeParent += 3 + (u8)r3->send.payloadSize;
+ gRfuLinkStatus->remainLLFrameSizeParent += 3 + (u8)slotStatusUNI->send.payloadSize;
else
- gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] += 2 + (u8)r3->send.payloadSize;
- gRfuLinkStatus->sendSlotUNIFlag &= ~r3->send.bmSlot;
+ gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] += 2 + (u8)slotStatusUNI->send.payloadSize;
+ gRfuLinkStatus->sendSlotUNIFlag &= ~slotStatusUNI->send.bmSlot;
}
- CpuFill16(0, &r3->send, sizeof(struct UNISend));
+ CpuFill16(0, &slotStatusUNI->send, sizeof(struct UNISend));
}
if (connTypeFlag & TYPE_UNI_RECV)
{
CpuFill16(0, &gRfuSlotStatusUNI[slotStatusIndex]->recv, sizeof(struct UNIRecv));
}
- REG_IME = r10;
+ REG_IME = imeBak;
return 0;
}
@@ -1301,16 +1336,16 @@ u16 rfu_NI_CHILD_setSendGameName(u8 slotNo, u8 subFrameSize)
return rfu_STC_setSendData_org(64, 1 << slotNo, subFrameSize, &gRfuLinkStatus->my.serialNo, 26);
}
-static u16 rfu_STC_setSendData_org(u8 r6, u8 bmSendSlot, u8 subFrameSize, const void *src, u32 sp28)
+static u16 rfu_STC_setSendData_org(u8 ni_or_uni, u8 bmSendSlot, u8 subFrameSize, const void *src, u32 dataSize)
{
- u8 r2, r0;
- u8 r4;
- u8 *r9;
- u8 r5;
+ u8 bm_slot_id, sendSlotFlag;
+ u8 frameSize;
+ u8 *llFrameSize_p;
+ u8 sending;
u8 i;
- u16 sp04;
- struct RfuSlotStatusUNI *r1;
- struct RfuSlotStatusNI *r12;
+ u16 imeBak;
+ struct RfuSlotStatusUNI *slotStatus_UNI;
+ struct RfuSlotStatusNI *slotStatus_NI;
if (gRfuLinkStatus->parentChild == MODE_NEUTRAL)
return ERR_MODE_NOT_CONNECTED;
@@ -1318,108 +1353,108 @@ static u16 rfu_STC_setSendData_org(u8 r6, u8 bmSendSlot, u8 subFrameSize, const
return ERR_SLOT_NO;
if (((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & bmSendSlot) != bmSendSlot)
return ERR_SLOT_NOT_CONNECTED;
- if (r6 & 0x10)
- r0 = gRfuLinkStatus->sendSlotUNIFlag;
+ if (ni_or_uni & 0x10)
+ sendSlotFlag = gRfuLinkStatus->sendSlotUNIFlag;
else
- r0 = gRfuLinkStatus->sendSlotNIFlag;
- if (r0 & bmSendSlot)
+ sendSlotFlag = gRfuLinkStatus->sendSlotNIFlag;
+ if (sendSlotFlag & bmSendSlot)
return ERR_SLOT_BUSY;
- for (r2 = 0; r2 < RFU_CHILD_MAX && !((bmSendSlot >> r2) & 1); ++r2)
+ for (bm_slot_id = 0; bm_slot_id < RFU_CHILD_MAX && !((bmSendSlot >> bm_slot_id) & 1); ++bm_slot_id)
;
if (gRfuLinkStatus->parentChild == MODE_PARENT)
- r9 = &gRfuLinkStatus->remainLLFrameSizeParent;
+ llFrameSize_p = &gRfuLinkStatus->remainLLFrameSizeParent;
else if (gRfuLinkStatus->parentChild == MODE_CHILD)
- r9 = &gRfuLinkStatus->remainLLFrameSizeChild[r2];
- r4 = llsf_struct[gRfuLinkStatus->parentChild].unk00;
- if (subFrameSize > *r9 || subFrameSize <= r4)
+ llFrameSize_p = &gRfuLinkStatus->remainLLFrameSizeChild[bm_slot_id];
+ frameSize = llsf_struct[gRfuLinkStatus->parentChild].frameSize;
+ if (subFrameSize > *llFrameSize_p || subFrameSize <= frameSize)
return ERR_SUBFRAME_SIZE;
- sp04 = REG_IME;
+ imeBak = REG_IME;
REG_IME = 0;
- r5 = r6 & 0x20;
- if (r5 || r6 == 0x40)
- {
- u8 *r1; // a hack to swap instructions
-
- r12 = gRfuSlotStatusNI[r2];
- r1 = NULL;
- r12->send.errorCode = 0;
- *r12->send.now_p = r1 = &r12->send.dataType;
- r12->send.remainSize = 7;
- r12->send.bmSlotOrg = bmSendSlot;
- r12->send.bmSlot = bmSendSlot;
- r12->send.payloadSize = subFrameSize - r4;
- if (r5 != 0)
- *r1 = 0;
+ sending = ni_or_uni & 0x20;
+ if (sending || ni_or_uni == 0x40)
+ {
+ u8 *dataType_p; // a hack to swap instructions
+
+ slotStatus_NI = gRfuSlotStatusNI[bm_slot_id];
+ slotStatus_UNI = NULL;
+ slotStatus_NI->send.errorCode = 0;
+ *slotStatus_NI->send.now_p = dataType_p = &slotStatus_NI->send.dataType;
+ slotStatus_NI->send.remainSize = 7;
+ slotStatus_NI->send.bmSlotOrg = bmSendSlot;
+ slotStatus_NI->send.bmSlot = bmSendSlot;
+ slotStatus_NI->send.payloadSize = subFrameSize - frameSize;
+ if (sending != 0)
+ *dataType_p = 0;
else
- *r1 = 1;
- r12->send.dataSize = sp28;
- r12->send.src = src;
- r12->send.ack = 0;
- r12->send.phase = 0;
- #ifndef NONMATCHING // to fix r2, r3, r4, r5 register roulette
+ *dataType_p = 1;
+ slotStatus_NI->send.dataSize = dataSize;
+ slotStatus_NI->send.src = src;
+ slotStatus_NI->send.ack = 0;
+ slotStatus_NI->send.phase = 0;
+ #ifndef NONMATCHING // to fix bm_slot_id, r3, frameSize, sending register roulette
asm("":::"r2");
#endif
for (i = 0; i < WINDOW_COUNT; ++i)
{
- r12->send.recvAckFlag[i] = 0;
- r12->send.n[i] = 1;
+ slotStatus_NI->send.recvAckFlag[i] = 0;
+ slotStatus_NI->send.n[i] = 1;
}
- for (r2 = 0; r2 < RFU_CHILD_MAX; ++r2)
- if ((bmSendSlot >> r2) & 1)
- gRfuSlotStatusNI[r2]->send.failCounter = 0;
+ for (bm_slot_id = 0; bm_slot_id < RFU_CHILD_MAX; ++bm_slot_id)
+ if ((bmSendSlot >> bm_slot_id) & 1)
+ gRfuSlotStatusNI[bm_slot_id]->send.failCounter = 0;
gRfuLinkStatus->sendSlotNIFlag |= bmSendSlot;
- *r9 -= subFrameSize;
- r12->send.state = SLOT_STATE_SEND_START;
+ *llFrameSize_p -= subFrameSize;
+ slotStatus_NI->send.state = SLOT_STATE_SEND_START;
}
- else if (r6 & 0x10)
+ else if (ni_or_uni & 0x10)
{
- r1 = gRfuSlotStatusUNI[r2];
- r1->send.bmSlot = bmSendSlot;
- r1->send.src = src;
- r1->send.payloadSize = subFrameSize - r4;
- *r9 -= subFrameSize;
- r1->send.state = SLOT_STATE_SEND_UNI;
+ slotStatus_UNI = gRfuSlotStatusUNI[bm_slot_id];
+ slotStatus_UNI->send.bmSlot = bmSendSlot;
+ slotStatus_UNI->send.src = src;
+ slotStatus_UNI->send.payloadSize = subFrameSize - frameSize;
+ *llFrameSize_p -= subFrameSize;
+ slotStatus_UNI->send.state = SLOT_STATE_SEND_UNI;
gRfuLinkStatus->sendSlotUNIFlag |= bmSendSlot;
}
- REG_IME = sp04;
+ REG_IME = imeBak;
return 0;
}
u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot)
{
- struct RfuSlotStatusNI *r5;
- u16 r8;
- u8 r2;
+ struct RfuSlotStatusNI *slotStatusNI;
+ u16 imeBak;
+ u8 i;
if (slotStatusIndex >= RFU_CHILD_MAX)
return ERR_SLOT_NO;
if (connType == 0x20)
{
- r5 = gRfuSlotStatusNI[slotStatusIndex];
- if ((r5->send.state & SLOT_BUSY_FLAG)
- && (r5->send.state & SLOT_SEND_FLAG))
+ slotStatusNI = gRfuSlotStatusNI[slotStatusIndex];
+ if ((slotStatusNI->send.state & SLOT_BUSY_FLAG)
+ && (slotStatusNI->send.state & SLOT_SEND_FLAG))
{
- connType = bmNewTgtSlot ^ r5->send.bmSlot;
-
+ connType = bmNewTgtSlot ^ slotStatusNI->send.bmSlot;
+
if (!(connType & bmNewTgtSlot))
{
if (connType)
{
- r8 = REG_IME;
+ imeBak = REG_IME;
REG_IME = 0;
- for (r2 = 0; r2 < RFU_CHILD_MAX; ++r2)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- if ((connType >> r2) & 1)
- gRfuSlotStatusNI[r2]->send.failCounter = 0;
+ if ((connType >> i) & 1)
+ gRfuSlotStatusNI[i]->send.failCounter = 0;
}
gRfuLinkStatus->sendSlotNIFlag &= ~connType;
- r5->send.bmSlot = bmNewTgtSlot;
- if (r5->send.bmSlot == 0)
+ slotStatusNI->send.bmSlot = bmNewTgtSlot;
+ if (slotStatusNI->send.bmSlot == 0)
{
- rfu_STC_releaseFrame(slotStatusIndex, 0, &r5->send);
- r5->send.state = SLOT_STATE_SEND_FAILED;
+ rfu_STC_releaseFrame(slotStatusIndex, 0, &slotStatusNI->send);
+ slotStatusNI->send.state = SLOT_STATE_SEND_FAILED;
}
- REG_IME = r8;
+ REG_IME = imeBak;
}
}
else
@@ -1436,21 +1471,21 @@ u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot)
{
if (connType == 16)
{
- s32 r3;
+ s32 bmSlot;
if (gRfuSlotStatusUNI[slotStatusIndex]->send.state != SLOT_STATE_SEND_UNI)
return ERR_SLOT_NOT_SENDING;
- for (r3 = 0, r2 = 0; r2 < RFU_CHILD_MAX; ++r2)
- if (r2 != slotStatusIndex)
- r3 |= gRfuSlotStatusUNI[r2]->send.bmSlot;
- if (bmNewTgtSlot & r3)
+ for (bmSlot = 0, i = 0; i < RFU_CHILD_MAX; ++i)
+ if (i != slotStatusIndex)
+ bmSlot |= gRfuSlotStatusUNI[i]->send.bmSlot;
+ if (bmNewTgtSlot & bmSlot)
return ERR_SLOT_TARGET;
- r8 = REG_IME;
+ imeBak = REG_IME;
REG_IME = 0;
gRfuLinkStatus->sendSlotUNIFlag &= ~gRfuSlotStatusUNI[slotStatusIndex]->send.bmSlot;
gRfuLinkStatus->sendSlotUNIFlag |= bmNewTgtSlot;
gRfuSlotStatusUNI[slotStatusIndex]->send.bmSlot = bmNewTgtSlot;
- REG_IME = r8;
+ REG_IME = imeBak;
}
else
{
@@ -1462,14 +1497,14 @@ u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot)
u16 rfu_NI_stopReceivingData(u8 slotStatusIndex)
{
- struct NIComm *r5;
- u16 r4, r1;
+ struct NIComm *NI_comm;
+ u16 imeBak;
if (slotStatusIndex >= RFU_CHILD_MAX)
return ERR_SLOT_NO;
- r5 = &gRfuSlotStatusNI[slotStatusIndex]->recv;
- r4 = REG_IME;
- ++r4; --r4; // fix r4, r5 register swap
+ NI_comm = &gRfuSlotStatusNI[slotStatusIndex]->recv;
+ imeBak = REG_IME;
+ ++imeBak; --imeBak; // fix imeBak, NI_comm register swap
REG_IME = 0;
if (gRfuSlotStatusNI[slotStatusIndex]->recv.state & SLOT_BUSY_FLAG)
{
@@ -1478,43 +1513,43 @@ u16 rfu_NI_stopReceivingData(u8 slotStatusIndex)
else
gRfuSlotStatusNI[slotStatusIndex]->recv.state = SLOT_STATE_RECV_FAILED;
gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex);
- rfu_STC_releaseFrame(slotStatusIndex, 1, r5);
+ rfu_STC_releaseFrame(slotStatusIndex, 1, NI_comm);
}
- REG_IME = r4;
+ REG_IME = imeBak;
return 0;
}
u16 rfu_UNI_changeAndReadySendData(u8 slotStatusIndex, const void *src, u8 size)
{
- struct UNISend *r4;
- u8 *r6;
- u16 r1;
- u8 r3_;
+ struct UNISend *UNI_send;
+ u8 *frame_p;
+ u16 imeBak;
+ u8 frameEnd;
if (slotStatusIndex >= RFU_CHILD_MAX)
return ERR_SLOT_NO;
- r4 = &gRfuSlotStatusUNI[slotStatusIndex]->send;
- if (r4->state != SLOT_STATE_SEND_UNI)
+ UNI_send = &gRfuSlotStatusUNI[slotStatusIndex]->send;
+ if (UNI_send->state != SLOT_STATE_SEND_UNI)
return ERR_SLOT_NOT_SENDING;
if (gRfuLinkStatus->parentChild == MODE_PARENT)
{
- r6 = &gRfuLinkStatus->remainLLFrameSizeParent;
- r3_ = gRfuLinkStatus->remainLLFrameSizeParent + (u8)r4->payloadSize;
+ frame_p = &gRfuLinkStatus->remainLLFrameSizeParent;
+ frameEnd = gRfuLinkStatus->remainLLFrameSizeParent + (u8)UNI_send->payloadSize;
}
else
{
- r6 = &gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex];
- r3_ = gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] + (u8)r4->payloadSize;
+ frame_p = &gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex];
+ frameEnd = gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] + (u8)UNI_send->payloadSize;
}
- if (r3_ < size)
+ if (frameEnd < size)
return ERR_SUBFRAME_SIZE;
- r1 = REG_IME;
+ imeBak = REG_IME;
REG_IME = 0;
- r4->src = src;
- *r6 = r3_ - size;
- r4->payloadSize = size;
- r4->dataReadyFlag = 1;
- REG_IME = r1;
+ UNI_send->src = src;
+ *frame_p = frameEnd - size;
+ UNI_send->payloadSize = size;
+ UNI_send->dataReadyFlag = 1;
+ REG_IME = imeBak;
return 0;
}
@@ -1593,184 +1628,184 @@ void rfu_REQ_sendData(bool8 clockChangeFlag)
}
}
-static void rfu_CB_sendData(UNUSED u8 r0, u16 r7)
+static void rfu_CB_sendData(UNUSED u8 reqCommand, u16 reqResult)
{
- u8 r6;
- struct NIComm *r4;
+ u8 i;
+ struct NIComm *NI_comm;
- if (r7 == 0)
+ if (reqResult == 0)
{
- for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- if (gRfuSlotStatusUNI[r6]->send.dataReadyFlag)
- gRfuSlotStatusUNI[r6]->send.dataReadyFlag = 0;
- r4 = &gRfuSlotStatusNI[r6]->send;
- if (r4->state == SLOT_STATE_SEND_NULL)
+ if (gRfuSlotStatusUNI[i]->send.dataReadyFlag)
+ gRfuSlotStatusUNI[i]->send.dataReadyFlag = 0;
+ NI_comm = &gRfuSlotStatusNI[i]->send;
+ if (NI_comm->state == SLOT_STATE_SEND_NULL)
{
- rfu_STC_releaseFrame(r6, 0, r4);
- gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlot;
- if (r4->dataType == 1)
- gRfuLinkStatus->getNameFlag |= 1 << r6;
- r4->state = SLOT_STATE_SEND_SUCCESS;
+ rfu_STC_releaseFrame(i, 0, NI_comm);
+ gRfuLinkStatus->sendSlotNIFlag &= ~NI_comm->bmSlot;
+ if (NI_comm->dataType == 1)
+ gRfuLinkStatus->getNameFlag |= 1 << i;
+ NI_comm->state = SLOT_STATE_SEND_SUCCESS;
}
}
}
gRfuLinkStatus->LLFReadyFlag = 0;
- rfu_STC_REQ_callback(36, r7);
+ rfu_STC_REQ_callback(ID_DATA_TX_REQ, reqResult);
}
-static void rfu_CB_sendData2(UNUSED u8 r0, u16 r1)
+static void rfu_CB_sendData2(UNUSED u8 reqCommand, u16 reqResult)
{
- rfu_STC_REQ_callback(36, r1);
+ rfu_STC_REQ_callback(ID_DATA_TX_REQ, reqResult);
}
-static void rfu_CB_sendData3(u8 r0, u16 r1)
+static void rfu_CB_sendData3(u8 reqCommand, u16 reqResult)
{
- if (r1 != 0)
- rfu_STC_REQ_callback(36, r1);
- else if (r0 == 0xFF)
- rfu_STC_REQ_callback(0xFF, 0);
+ if (reqResult != 0)
+ rfu_STC_REQ_callback(ID_DATA_TX_REQ, reqResult);
+ else if (reqCommand == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ)
+ rfu_STC_REQ_callback(ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ, 0);
}
static void rfu_constructSendLLFrame(void)
{
- u32 r8, r5;
- u8 r6;
- u8 *sp00;
- struct RfuSlotStatusNI *r2;
+ u32 pakcketSize, currSize;
+ u8 i;
+ u8 *llf_p;
+ struct RfuSlotStatusNI *slotStatusNI;
if (gRfuLinkStatus->parentChild != MODE_NEUTRAL
&& gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag)
{
gRfuLinkStatus->LLFReadyFlag = 0;
- r8 = 0;
- sp00 = (u8 *)&gRfuFixed->LLFBuffer[1];
- for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6)
+ pakcketSize = 0;
+ llf_p = (u8 *)&gRfuFixed->LLFBuffer[1];
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- r5 = 0;
- if (gRfuSlotStatusNI[r6]->send.state & SLOT_BUSY_FLAG)
- r5 = rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->send);
- if (gRfuSlotStatusNI[r6]->recv.state & SLOT_BUSY_FLAG)
- r5 += rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->recv);
- if (gRfuSlotStatusUNI[r6]->send.state == SLOT_STATE_SEND_UNI)
- r5 += rfu_STC_UNI_constructLLSF(r6, &sp00);
- if (r5 != 0)
+ currSize = 0;
+ if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG)
+ currSize = rfu_STC_NI_constructLLSF(i, &llf_p, &gRfuSlotStatusNI[i]->send);
+ if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG)
+ currSize += rfu_STC_NI_constructLLSF(i, &llf_p, &gRfuSlotStatusNI[i]->recv);
+ if (gRfuSlotStatusUNI[i]->send.state == SLOT_STATE_SEND_UNI)
+ currSize += rfu_STC_UNI_constructLLSF(i, &llf_p);
+ if (currSize != 0)
{
if (gRfuLinkStatus->parentChild == MODE_PARENT)
- r8 += r5;
+ pakcketSize += currSize;
else
- r8 |= r5 << (5 * r6 + 8);
+ pakcketSize |= currSize << (5 * i + 8);
}
}
- if (r8 != 0)
+ if (pakcketSize != 0)
{
- while ((u32)sp00 & 3)
- *sp00++ = 0;
- gRfuFixed->LLFBuffer[0] = r8;
+ while ((u32)llf_p & 3)
+ *llf_p++ = 0;
+ gRfuFixed->LLFBuffer[0] = pakcketSize;
if (gRfuLinkStatus->parentChild == MODE_CHILD)
{
- u8 *r0 = sp00 - offsetof(struct RfuFixed, LLFBuffer[1]);
-
- // Does the volatile qualifier make sense?
- // It's the same as:
+ u8 *maxSize = llf_p - offsetof(struct RfuFixed, LLFBuffer[1]);
+
+ // Does the volatile qualifier make sense?
+ // It's the same as:
// asm("":::"memory");
- r8 = r0 - *(u8 *volatile *)&gRfuFixed;
+ pakcketSize = maxSize - *(u8 *volatile *)&gRfuFixed;
}
}
- gRfuStatic->totalPacketSize = r8;
+ gRfuStatic->totalPacketSize = pakcketSize;
}
}
-static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4)
+static u16 rfu_STC_NI_constructLLSF(u8 bm_slot_id, u8 **dest_pp, struct NIComm *NI_comm)
{
- u16 r5;
- u32 sp00;
+ u16 size;
+ u32 frame;
u8 i;
- u8 *r2;
- const struct LLSFStruct *r8 = &llsf_struct[gRfuLinkStatus->parentChild];
+ u8 *frame8_p;
+ const struct LLSFStruct *llsf = &llsf_struct[gRfuLinkStatus->parentChild];
- if (r4->state == SLOT_STATE_SENDING)
+ if (NI_comm->state == SLOT_STATE_SENDING)
{
- while (r4->now_p[r4->phase] >= (const u8 *)r4->src + r4->dataSize)
+ while (NI_comm->now_p[NI_comm->phase] >= (const u8 *)NI_comm->src + NI_comm->dataSize)
{
- ++r4->phase;
- if (r4->phase == 4)
- r4->phase = 0;
+ ++NI_comm->phase;
+ if (NI_comm->phase == 4)
+ NI_comm->phase = 0;
}
}
- if (r4->state & SLOT_RECV_FLAG)
+ if (NI_comm->state & SLOT_RECV_FLAG)
{
- r5 = 0;
+ size = 0;
}
- else if (r4->state == SLOT_STATE_SENDING)
+ else if (NI_comm->state == SLOT_STATE_SENDING)
{
- if (r4->now_p[r4->phase] + r4->payloadSize > (const u8 *)r4->src + r4->dataSize)
- r5 = (const u8 *)r4->src + r4->dataSize - r4->now_p[r4->phase];
+ if (NI_comm->now_p[NI_comm->phase] + NI_comm->payloadSize > (const u8 *)NI_comm->src + NI_comm->dataSize)
+ size = (const u8 *)NI_comm->src + NI_comm->dataSize - NI_comm->now_p[NI_comm->phase];
else
- r5 = r4->payloadSize;
+ size = NI_comm->payloadSize;
}
else
{
- if ((u32)r4->remainSize >= r4->payloadSize)
- r5 = r4->payloadSize;
+ if ((u32)NI_comm->remainSize >= NI_comm->payloadSize)
+ size = NI_comm->payloadSize;
else
- r5 = r4->remainSize;
+ size = NI_comm->remainSize;
}
- sp00 = (r4->state & 0xF) << r8->unk03
- | r4->ack << r8->unk04
- | r4->phase << r8->unk05
- | r4->n[r4->phase] << r8->unk06
- | r5;
+ frame = (NI_comm->state & 0xF) << llsf->slotStateShift
+ | NI_comm->ack << llsf->ackShift
+ | NI_comm->phase << llsf->phaseShit
+ | NI_comm->n[NI_comm->phase] << llsf->nShift
+ | size;
if (gRfuLinkStatus->parentChild == MODE_PARENT)
- sp00 |= r4->bmSlot << 18;
- r2 = (u8 *)&sp00;
- for (i = 0; i < r8->unk00; ++i)
- *(*r12)++ = *r2++;
- if (r5 != 0)
+ frame |= NI_comm->bmSlot << 18;
+ frame8_p = (u8 *)&frame;
+ for (i = 0; i < llsf->frameSize; ++i)
+ *(*dest_pp)++ = *frame8_p++;
+ if (size != 0)
{
- const u8 *sp04 = r4->now_p[r4->phase];
+ const u8 *src = NI_comm->now_p[NI_comm->phase];
- gRfuFixed->fastCopyPtr(&sp04, r12, r5);
+ gRfuFixed->fastCopyPtr(&src, dest_pp, size);
}
- if (r4->state == SLOT_STATE_SENDING)
+ if (NI_comm->state == SLOT_STATE_SENDING)
{
- ++r4->phase;
- if (r4->phase == 4)
- r4->phase = 0;
+ ++NI_comm->phase;
+ if (NI_comm->phase == 4)
+ NI_comm->phase = 0;
}
if (gRfuLinkStatus->parentChild == MODE_PARENT)
gRfuLinkStatus->LLFReadyFlag = 1;
else
- gRfuLinkStatus->LLFReadyFlag |= 1 << r10;
- return r5 + r8->unk00;
+ gRfuLinkStatus->LLFReadyFlag |= 1 << bm_slot_id;
+ return size + llsf->frameSize;
}
-static u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6)
+static u16 rfu_STC_UNI_constructLLSF(u8 bm_slot_id, u8 **dest_p)
{
- const struct LLSFStruct *r5;
- const u8 *sp04;
- u32 sp00;
- u8 *r2;
+ const struct LLSFStruct *llsf;
+ const u8 *src_p;
+ u32 frame;
+ u8 *frame8_p;
u8 i;
- struct UNISend *r4 = &gRfuSlotStatusUNI[r8]->send;
+ struct UNISend *UNI_send = &gRfuSlotStatusUNI[bm_slot_id]->send;
- if (!r4->dataReadyFlag || !r4->bmSlot)
+ if (!UNI_send->dataReadyFlag || !UNI_send->bmSlot)
return 0;
- r5 = &llsf_struct[gRfuLinkStatus->parentChild];
- sp00 = (r4->state & 0xF) << r5->unk03
- | r4->payloadSize;
+ llsf = &llsf_struct[gRfuLinkStatus->parentChild];
+ frame = (UNI_send->state & 0xF) << llsf->slotStateShift
+ | UNI_send->payloadSize;
if (gRfuLinkStatus->parentChild == MODE_PARENT)
- sp00 |= r4->bmSlot << 18;
- r2 = (u8 *)&sp00;
- for (i = 0; i < r5->unk00; ++i)
- *(*r6)++ = *r2++;
- sp04 = r4->src;
- gRfuFixed->fastCopyPtr(&sp04, r6, r4->payloadSize);
+ frame |= UNI_send->bmSlot << 18;
+ frame8_p = (u8 *)&frame;
+ for (i = 0; i < llsf->frameSize; ++i)
+ *(*dest_p)++ = *frame8_p++;
+ src_p = UNI_send->src;
+ gRfuFixed->fastCopyPtr(&src_p, dest_p, UNI_send->payloadSize);
if (gRfuLinkStatus->parentChild == MODE_PARENT)
gRfuLinkStatus->LLFReadyFlag = 16;
else
- gRfuLinkStatus->LLFReadyFlag |= 16 << r8;
- return r5->unk00 + r4->payloadSize;
+ gRfuLinkStatus->LLFReadyFlag |= 16 << bm_slot_id;
+ return llsf->frameSize + UNI_send->payloadSize;
}
void rfu_REQ_recvData(void)
@@ -1784,434 +1819,433 @@ void rfu_REQ_recvData(void)
}
}
-static void rfu_CB_recvData(u8 r9, u16 r7)
+static void rfu_CB_recvData(u8 reqCommand, u16 reqResult)
{
- u8 r6;
- struct RfuSlotStatusNI *r4;
- struct NIComm *r5;
+ u8 i;
+ struct RfuSlotStatusNI *slotStatusNI;
+ struct NIComm *NI_comm;
- if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1])
+ if (reqResult == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1])
{
gRfuStatic->NIEndRecvFlag = 0;
if (gRfuLinkStatus->parentChild == MODE_PARENT)
rfu_STC_PARENT_analyzeRecvPacket();
else
rfu_STC_CHILD_analyzeRecvPacket();
- for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- r4 = gRfuSlotStatusNI[r6];
- if (r4->recv.state == SLOT_STATE_RECV_LAST && !((gRfuStatic->NIEndRecvFlag >> r6) & 1))
+ slotStatusNI = gRfuSlotStatusNI[i];
+ if (slotStatusNI->recv.state == SLOT_STATE_RECV_LAST && !((gRfuStatic->NIEndRecvFlag >> i) & 1))
{
- r5 = &r4->recv;
- if (r5->dataType == 1)
- gRfuLinkStatus->getNameFlag |= 1 << r6;
- rfu_STC_releaseFrame(r6, 1, r5);
- gRfuLinkStatus->recvSlotNIFlag &= ~r5->bmSlot;
- r4->recv.state = SLOT_STATE_RECV_SUCCESS;
+ NI_comm = &slotStatusNI->recv;
+ if (NI_comm->dataType == 1)
+ gRfuLinkStatus->getNameFlag |= 1 << i;
+ rfu_STC_releaseFrame(i, 1, NI_comm);
+ gRfuLinkStatus->recvSlotNIFlag &= ~NI_comm->bmSlot;
+ slotStatusNI->recv.state = SLOT_STATE_RECV_SUCCESS;
}
}
if (gRfuStatic->recvErrorFlag)
- r7 = gRfuStatic->recvErrorFlag | ERR_DATA_RECV;
+ reqResult = gRfuStatic->recvErrorFlag | ERR_DATA_RECV;
}
- rfu_STC_REQ_callback(r9, r7);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
static void rfu_STC_PARENT_analyzeRecvPacket(void)
{
- u32 r3;
- u8 r5;
- u8 sp[4];
- u8 *r6;
+ u32 frames32;
+ u8 bm_slot_id;
+ u8 frame_counts[RFU_CHILD_MAX];
+ u8 *packet_p;
- r3 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] >> 8;
- for (r5 = 0; r5 < NELEMS(sp); ++r5)
+ frames32 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] >> 8;
+ for (bm_slot_id = 0; bm_slot_id < RFU_CHILD_MAX; ++bm_slot_id)
{
- sp[r5] = r3 & 0x1F;
- r3 >>= 5;
- if (sp[r5] == 0)
- gRfuStatic->NIEndRecvFlag |= 1 << r5;
+ frame_counts[bm_slot_id] = frames32 & 0x1F;
+ frames32 >>= 5;
+ if (frame_counts[bm_slot_id] == 0)
+ gRfuStatic->NIEndRecvFlag |= 1 << bm_slot_id;
}
- r6 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8];
- for (r5 = 0; r5 < NELEMS(sp); ++r5)
+ packet_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8];
+ for (bm_slot_id = 0; bm_slot_id < RFU_CHILD_MAX; ++bm_slot_id)
{
- if (sp[r5])
+ if (frame_counts[bm_slot_id])
{
- u8 *r4 = &sp[r5];
+ u8 *frames_p = &frame_counts[bm_slot_id];
do
{
- u8 r0 = rfu_STC_analyzeLLSF(r5, r6, *r4);
+ u8 analyzed_frames = rfu_STC_analyzeLLSF(bm_slot_id, packet_p, *frames_p);
- r6 += r0;
- *r4 -= r0;
- } while (!(*r4 & 0x80) && (*r4));
+ packet_p += analyzed_frames;
+ *frames_p -= analyzed_frames;
+ } while (!(*frames_p & 0x80) && (*frames_p));
}
}
}
static void rfu_STC_CHILD_analyzeRecvPacket(void)
{
- u16 r4;
- u8 *r5;
- u16 r0;
+ u16 frames_remaining;
+ u8 *packet_p;
+ u16 analyzed_frames;
- r4 = *(u16 *)&gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] & 0x7F;
- r5 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8];
- if (r4 == 0)
+ frames_remaining = *(u16 *)&gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] & 0x7F;
+ packet_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8];
+ if (frames_remaining == 0)
gRfuStatic->NIEndRecvFlag = 15;
do
{
- if (r4 == 0)
+ if (frames_remaining == 0)
break;
- r0 = rfu_STC_analyzeLLSF(0, r5, r4);
- r5 += r0;
- r4 -= r0;
- } while (!(r4 & 0x8000));
-}
-
-static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3)
-{
- struct RfuLocalStruct sp00;
- const struct LLSFStruct *r6;
- u32 r5;
- u8 r4;
- u32 r0;
- u16 r10;
-
- r6 = &llsf_struct[~gRfuLinkStatus->parentChild & (MODE_NEUTRAL & MODE_PARENT)];
- if (r3 < r6->unk00)
- return r3;
- r5 = 0;
- for (r4 = 0; r4 < r6->unk00; ++r4)
- r5 |= *r7++ << 8 * r4;
- sp00.unk00 = (r5 >> r6->unk01) & r6->unk07;
- sp00.unk01 = (r5 >> r6->unk02) & r6->unk08;
- sp00.unk02 = (r5 >> r6->unk03) & r6->unk09;
- sp00.unk03 = (r5 >> r6->unk04) & r6->unk0A;
- sp00.unk04 = (r5 >> r6->unk05) & r6->unk0B;
- sp00.unk05 = (r5 >> r6->unk06) & r6->unk0C;
- sp00.unk06 = (r5 & r6->unk0E) & r5;
- r10 = sp00.unk06 + r6->unk00;
- if (sp00.unk00 == 0)
+ analyzed_frames = rfu_STC_analyzeLLSF(0, packet_p, frames_remaining);
+ packet_p += analyzed_frames;
+ frames_remaining -= analyzed_frames;
+ } while (!(frames_remaining & 0x8000));
+}
+
+static u16 rfu_STC_analyzeLLSF(u8 bm_slot_id, const u8 *src, u16 last_frame)
+{
+ struct RfuLocalStruct llsf_NI;
+ const struct LLSFStruct *llsf_p;
+ u32 frames;
+ u8 i;
+ u16 retVal;
+
+ llsf_p = &llsf_struct[~gRfuLinkStatus->parentChild & (MODE_NEUTRAL & MODE_PARENT)];
+ if (last_frame < llsf_p->frameSize)
+ return last_frame;
+ frames = 0;
+ for (i = 0; i < llsf_p->frameSize; ++i)
+ frames |= *src++ << 8 * i;
+ llsf_NI.unk0 = (frames >> llsf_p->unk01) & llsf_p->unk07;
+ llsf_NI.unk1 = (frames >> llsf_p->unk02) & llsf_p->unk08;
+ llsf_NI.slotState = (frames >> llsf_p->slotStateShift) & llsf_p->slotStateMask;
+ llsf_NI.ack = (frames >> llsf_p->ackShift) & llsf_p->ackMask;
+ llsf_NI.phase = (frames >> llsf_p->phaseShit) & llsf_p->phaseMask;
+ llsf_NI.n = (frames >> llsf_p->nShift) & llsf_p->nMask;
+ llsf_NI.unk6 = (frames & llsf_p->unk0E) & frames;
+ retVal = llsf_NI.unk6 + llsf_p->frameSize;
+ if (llsf_NI.unk0 == 0)
{
if (gRfuLinkStatus->parentChild == MODE_PARENT)
{
- if ((gRfuLinkStatus->connSlotFlag >> r12) & 1)
+ if ((gRfuLinkStatus->connSlotFlag >> bm_slot_id) & 1)
{
- if (sp00.unk02 == 4)
+ if (llsf_NI.slotState == LCOM_UNI)
{
- rfu_STC_UNI_receive(r12, &sp00, r7);
+ rfu_STC_UNI_receive(bm_slot_id, &llsf_NI, src);
}
- else if (sp00.unk03 == 0)
+ else if (llsf_NI.ack == 0)
{
- rfu_STC_NI_receive_Receiver(r12, &sp00, r7);
+ rfu_STC_NI_receive_Receiver(bm_slot_id, &llsf_NI, src);
}
else
{
- for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4)
- if (((gRfuSlotStatusNI[r4]->send.bmSlot >> r12) & 1)
- && ((gRfuLinkStatus->sendSlotNIFlag >> r12) & 1))
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
+ if (((gRfuSlotStatusNI[i]->send.bmSlot >> bm_slot_id) & 1)
+ && ((gRfuLinkStatus->sendSlotNIFlag >> bm_slot_id) & 1))
break;
- if (r4 <= 3)
- rfu_STC_NI_receive_Sender(r4, r12, &sp00, r7);
+ if (i < RFU_CHILD_MAX)
+ rfu_STC_NI_receive_Sender(i, bm_slot_id, &llsf_NI, src);
}
}
}
else
{
- s32 r5 = gRfuLinkStatus->connSlotFlag & sp00.unk01;
+ s32 conSlots = gRfuLinkStatus->connSlotFlag & llsf_NI.unk1;
- if (r5)
+ if (conSlots)
{
- for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- if ((r5 >> r4) & 1)
+ if ((conSlots >> i) & 1)
{
- if (sp00.unk02 == 4)
- rfu_STC_UNI_receive(r4, &sp00, r7);
- else if (sp00.unk03 == 0)
- rfu_STC_NI_receive_Receiver(r4, &sp00, r7);
- else if ((gRfuLinkStatus->sendSlotNIFlag >> r4) & 1)
- rfu_STC_NI_receive_Sender(r4, r4, &sp00, r7);
+ if (llsf_NI.slotState == LCOM_UNI)
+ rfu_STC_UNI_receive(i, &llsf_NI, src);
+ else if (llsf_NI.ack == 0)
+ rfu_STC_NI_receive_Receiver(i, &llsf_NI, src);
+ else if ((gRfuLinkStatus->sendSlotNIFlag >> i) & 1)
+ rfu_STC_NI_receive_Sender(i, i, &llsf_NI, src);
}
}
}
}
}
- return r10;
+ return retVal;
}
-static void rfu_STC_UNI_receive(u8 r7, const struct RfuLocalStruct *r6, const u8 *sp00)
+static void rfu_STC_UNI_receive(u8 bm_slot_id, const struct RfuLocalStruct *llsf_NI, const u8 *src)
{
- u8 *sp04;
- u32 r2;
- struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[r7];
- struct UNIRecv *r5 = &r3->recv;
+ u8 *dest;
+ u32 size;
+ struct RfuSlotStatusUNI *slotStatusUNI = gRfuSlotStatusUNI[bm_slot_id];
+ struct UNIRecv *UNI_recv = &slotStatusUNI->recv;
- r5->errorCode = 0;
- if (gRfuSlotStatusUNI[r7]->recvBufferSize < r6->unk06)
+ UNI_recv->errorCode = 0;
+ if (gRfuSlotStatusUNI[bm_slot_id]->recvBufferSize < llsf_NI->unk6)
{
- r3->recv.state = SLOT_STATE_RECV_IGNORE;
- r5->errorCode = ERR_RECV_BUFF_OVER;
+ slotStatusUNI->recv.state = SLOT_STATE_RECV_IGNORE;
+ UNI_recv->errorCode = ERR_RECV_BUFF_OVER;
}
else
- {
- if (r5->dataBlockFlag)
+ {
+ if (UNI_recv->dataBlockFlag)
{
- if (r5->newDataFlag)
+ if (UNI_recv->newDataFlag)
{
- r5->errorCode = ERR_RECV_UNK;
+ UNI_recv->errorCode = ERR_RECV_UNK;
goto _081E2F0E;
}
}
else
{
- if (r5->newDataFlag)
- r5->errorCode = ERR_RECV_DATA_OVERWRITED;
+ if (UNI_recv->newDataFlag)
+ UNI_recv->errorCode = ERR_RECV_DATA_OVERWRITED;
}
- r5->state = SLOT_STATE_RECEIVING;
- r2 = r5->dataSize = r6->unk06;
- sp04 = gRfuSlotStatusUNI[r7]->recvBuffer;
- gRfuFixed->fastCopyPtr(&sp00, &sp04, r2);
- r5->newDataFlag = 1;
- r5->state = 0;
+ UNI_recv->state = SLOT_STATE_RECEIVING;
+ size = UNI_recv->dataSize = llsf_NI->unk6;
+ dest = gRfuSlotStatusUNI[bm_slot_id]->recvBuffer;
+ gRfuFixed->fastCopyPtr(&src, &dest, size);
+ UNI_recv->newDataFlag = 1;
+ UNI_recv->state = 0;
}
_081E2F0E:
- if (r5->errorCode)
- gRfuStatic->recvErrorFlag |= 16 << r7;
+ if (UNI_recv->errorCode)
+ gRfuStatic->recvErrorFlag |= 16 << bm_slot_id;
}
-static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct *r6, const u8 *r3)
+static void rfu_STC_NI_receive_Sender(u8 NI_slot, u8 bm_flag, const struct RfuLocalStruct *llsf_NI, const u8 *data_p)
{
- struct NIComm *r12 = &gRfuSlotStatusNI[r0]->send;
- u16 r9 = r12->state;
- u8 sp00 = r12->n[r6->unk04];
- u8 *r8;
- u8 r4;
- u16 r2;
+ struct NIComm *NI_comm = &gRfuSlotStatusNI[NI_slot]->send;
+ u16 state = NI_comm->state;
+ u8 n = NI_comm->n[llsf_NI->phase];
+ u8 i;
+ u16 imeBak;
- if ((r6->unk02 == 2 && r9 == SLOT_STATE_SENDING)
- || (r6->unk02 == 1 && r9 == SLOT_STATE_SEND_START)
- || (r6->unk02 == 3 && r9 == SLOT_STATE_SEND_LAST))
+ if ((llsf_NI->slotState == LCOM_NI && state == SLOT_STATE_SENDING)
+ || (llsf_NI->slotState == LCOM_NI_START && state == SLOT_STATE_SEND_START)
+ || (llsf_NI->slotState == LCOM_NI_END && state == SLOT_STATE_SEND_LAST))
{
- if (r12->n[r6->unk04] == r6->unk05)
- r12->recvAckFlag[r6->unk04] |= 1 << r10;
+ if (NI_comm->n[llsf_NI->phase] == llsf_NI->n)
+ NI_comm->recvAckFlag[llsf_NI->phase] |= 1 << bm_flag;
}
- if ((r12->recvAckFlag[r6->unk04] & r12->bmSlot) == r12->bmSlot)
+ if ((NI_comm->recvAckFlag[llsf_NI->phase] & NI_comm->bmSlot) == NI_comm->bmSlot)
{
- r12->n[r6->unk04] = (r12->n[r6->unk04] + 1) & 3;
- r12->recvAckFlag[r6->unk04] = 0;
- if ((u16)(r12->state + ~SLOT_STATE_SEND_NULL) <= 1)
+ NI_comm->n[llsf_NI->phase] = (NI_comm->n[llsf_NI->phase] + 1) & 3;
+ NI_comm->recvAckFlag[llsf_NI->phase] = 0;
+ if ((u16)(NI_comm->state + ~SLOT_STATE_SEND_NULL) <= 1)
{
- if (r12->state == SLOT_STATE_SEND_START)
- r12->now_p[r6->unk04] += r12->payloadSize;
+ if (NI_comm->state == SLOT_STATE_SEND_START)
+ NI_comm->now_p[llsf_NI->phase] += NI_comm->payloadSize;
else
- r12->now_p[r6->unk04] += r12->payloadSize << 2;
- r12->remainSize -= r12->payloadSize;
- if (r12->remainSize != 0)
- if (r12->remainSize >= 0)
+ NI_comm->now_p[llsf_NI->phase] += NI_comm->payloadSize << 2;
+ NI_comm->remainSize -= NI_comm->payloadSize;
+ if (NI_comm->remainSize != 0)
+ if (NI_comm->remainSize >= 0)
goto _081E30AE;
- // Above is a hack to avoid optimization over comparison.
- // rfu_STC_NI_constructLLSF uses this field as u32.
- // It's equivalent to the following condition:
- // if (r12->remainSize == 0 || r12->remainSize < 0)
- {
- r12->phase = 0;
- if (r12->state == SLOT_STATE_SEND_START)
+ // Above is a hack to avoid optimization over comparison.
+ // rfu_STC_NI_constructLLSF uses this field as u32.
+ // It's equivalent to the following condition:
+ // if (NI_comm->remainSize == 0 || NI_comm->remainSize < 0)
{
- for (r4 = 0; r4 < WINDOW_COUNT; ++r4)
+ NI_comm->phase = 0;
+ if (NI_comm->state == SLOT_STATE_SEND_START)
{
- r12->n[r4] = 1;
- r12->now_p[r4] = r12->src + r12->payloadSize * r4;
+ for (i = 0; i < WINDOW_COUNT; ++i)
+ {
+ NI_comm->n[i] = 1;
+ NI_comm->now_p[i] = NI_comm->src + NI_comm->payloadSize * i;
+ }
+ NI_comm->remainSize = NI_comm->dataSize;
+ NI_comm->state = SLOT_STATE_SENDING;
+ }
+ else
+ {
+ NI_comm->n[0] = 0;
+ NI_comm->remainSize = 0;
+ NI_comm->state = SLOT_STATE_SEND_LAST;
}
- r12->remainSize = r12->dataSize;
- r12->state = SLOT_STATE_SENDING;
- }
- else
- {
- r12->n[0] = 0;
- r12->remainSize = 0;
- r12->state = SLOT_STATE_SEND_LAST;
}
- }
_081E30AE:
+ ;
}
- else if (r12->state == SLOT_STATE_SEND_LAST)
+ else if (NI_comm->state == SLOT_STATE_SEND_LAST)
{
- r12->state = SLOT_STATE_SEND_NULL;
+ NI_comm->state = SLOT_STATE_SEND_NULL;
}
}
- if (r12->state != r9
- || r12->n[r6->unk04] != sp00
- || (r12->recvAckFlag[r6->unk04] >> r10) & 1)
+ if (NI_comm->state != state
+ || NI_comm->n[llsf_NI->phase] != n
+ || (NI_comm->recvAckFlag[llsf_NI->phase] >> bm_flag) & 1)
{
- r2 = REG_IME;
+ imeBak = REG_IME;
REG_IME = 0;
- gRfuStatic->recvRenewalFlag |= 16 << r10;
- gRfuSlotStatusNI[r10]->send.failCounter = 0;
- REG_IME = r2;
+ gRfuStatic->recvRenewalFlag |= 16 << bm_flag;
+ gRfuSlotStatusNI[bm_flag]->send.failCounter = 0;
+ REG_IME = imeBak;
}
}
-static void rfu_STC_NI_receive_Receiver(u8 r8, const struct RfuLocalStruct *r6, const u8 *sp00)
+static void rfu_STC_NI_receive_Receiver(u8 bm_slot_id, const struct RfuLocalStruct *llsf_NI, const u8 *data_p)
{
- u16 r2;
- u32 r7 = 0;
- struct RfuSlotStatusNI *r4 = gRfuSlotStatusNI[r8];
- struct NIComm *r5 = &r4->recv;
- u16 r9 = r4->recv.state;
- u8 r10 = r4->recv.n[r6->unk04];
+ u16 imeBak;
+ u32 state_check = 0;
+ struct RfuSlotStatusNI *slotStatus_NI = gRfuSlotStatusNI[bm_slot_id];
+ struct NIComm *recvSlot = &slotStatus_NI->recv;
+ u16 state = slotStatus_NI->recv.state;
+ u8 n = slotStatus_NI->recv.n[llsf_NI->phase];
- if (r6->unk02 == 3)
+ if (llsf_NI->slotState == LCOM_NI_END)
{
- gRfuStatic->NIEndRecvFlag |= 1 << r8;
- if (r4->recv.state == SLOT_STATE_RECEIVING)
+ gRfuStatic->NIEndRecvFlag |= 1 << bm_slot_id;
+ if (slotStatus_NI->recv.state == SLOT_STATE_RECEIVING)
{
- r4->recv.phase = 0;
- r4->recv.n[0] = 0;
- r4->recv.state = SLOT_STATE_RECV_LAST;
+ slotStatus_NI->recv.phase = 0;
+ slotStatus_NI->recv.n[0] = 0;
+ slotStatus_NI->recv.state = SLOT_STATE_RECV_LAST;
}
}
- else if (r6->unk02 == 2)
+ else if (llsf_NI->slotState == LCOM_NI)
{
- if (r9 == SLOT_STATE_RECV_START && !r5->remainSize)
- rfu_STC_NI_initSlot_asRecvDataEntity(r8, r5);
- if (r5->state == SLOT_STATE_RECEIVING)
- r7 = 1;
+ if (state == SLOT_STATE_RECV_START && !recvSlot->remainSize)
+ rfu_STC_NI_initSlot_asRecvDataEntity(bm_slot_id, recvSlot);
+ if (recvSlot->state == SLOT_STATE_RECEIVING)
+ state_check = 1;
}
- else if (r6->unk02 == 1)
+ else if (llsf_NI->slotState == LCOM_NI_START)
{
- if (r9 == SLOT_STATE_RECV_START)
+ if (state == SLOT_STATE_RECV_START)
{
- r7 = 1;
+ state_check = 1;
}
else
{
- rfu_STC_NI_initSlot_asRecvControllData(r8, r5);
- if (r4->recv.state != SLOT_STATE_RECV_START)
+ rfu_STC_NI_initSlot_asRecvControllData(bm_slot_id, recvSlot);
+ if (slotStatus_NI->recv.state != SLOT_STATE_RECV_START)
return;
- r7 = 1;
+ state_check = 1;
}
}
- if (r7 != 0)
+ if (state_check != 0)
{
- if (r6->unk05 == ((r5->n[r6->unk04] + 1) & 3))
+ if (llsf_NI->n == ((recvSlot->n[llsf_NI->phase] + 1) & 3))
{
- gRfuFixed->fastCopyPtr(&sp00, (u8 **)&r5->now_p[r6->unk04], r6->unk06);
- if (r5->state == SLOT_STATE_RECEIVING)
- r5->now_p[r6->unk04] += 3 * r5->payloadSize;
- r5->remainSize -= r6->unk06;
- r5->n[r6->unk04] = r6->unk05;
+ gRfuFixed->fastCopyPtr(&data_p, (u8 **)&recvSlot->now_p[llsf_NI->phase], llsf_NI->unk6);
+ if (recvSlot->state == SLOT_STATE_RECEIVING)
+ recvSlot->now_p[llsf_NI->phase] += 3 * recvSlot->payloadSize;
+ recvSlot->remainSize -= llsf_NI->unk6;
+ recvSlot->n[llsf_NI->phase] = llsf_NI->n;
}
}
- if (r5->errorCode == 0)
+ if (recvSlot->errorCode == 0)
{
- r5->phase = r6->unk04;
- if (r5->state != r9 || r5->n[r6->unk04] != r10 || r5->n[r6->unk04] == r6->unk05)
+ recvSlot->phase = llsf_NI->phase;
+ if (recvSlot->state != state || recvSlot->n[llsf_NI->phase] != n || recvSlot->n[llsf_NI->phase] == llsf_NI->n)
{
- r2 = REG_IME;
+ imeBak = REG_IME;
REG_IME = 0;
- gRfuStatic->recvRenewalFlag |= 1 << r8;
- r5->failCounter = 0;
- REG_IME = r2;
+ gRfuStatic->recvRenewalFlag |= 1 << bm_slot_id;
+ recvSlot->failCounter = 0;
+ REG_IME = imeBak;
}
}
}
-static void rfu_STC_NI_initSlot_asRecvControllData(u8 r4, struct NIComm *r2)
+static void rfu_STC_NI_initSlot_asRecvControllData(u8 bm_slot_id, struct NIComm *NI_comm)
{
- u8 *r1;
- u32 r5;
- u8 r6;
+ u8 *llFrameSize_p;
+ u32 llFrameSize;
+ u8 bm_slot_flag;
if (gRfuLinkStatus->parentChild == MODE_PARENT)
{
- r5 = 3;
- r1 = &gRfuLinkStatus->remainLLFrameSizeParent;
+ llFrameSize = 3;
+ llFrameSize_p = &gRfuLinkStatus->remainLLFrameSizeParent;
}
else
{
- r5 = 2;
- r1 = &gRfuLinkStatus->remainLLFrameSizeChild[r4];
+ llFrameSize = 2;
+ llFrameSize_p = &gRfuLinkStatus->remainLLFrameSizeChild[bm_slot_id];
}
- r6 = 1 << r4;
- if (r2->state == 0)
+ bm_slot_flag = 1 << bm_slot_id;
+ if (NI_comm->state == 0)
{
- if (*r1 < r5)
+ if (*llFrameSize_p < llFrameSize)
{
- r2->state = SLOT_STATE_RECV_IGNORE;
- r2->errorCode = ERR_RECV_REPLY_SUBFRAME_SIZE;
- gRfuStatic->recvErrorFlag |= r6;
+ NI_comm->state = SLOT_STATE_RECV_IGNORE;
+ NI_comm->errorCode = ERR_RECV_REPLY_SUBFRAME_SIZE;
+ gRfuStatic->recvErrorFlag |= bm_slot_flag;
}
else
{
- r2->errorCode = 0;
- *r1 -= r5;
- r2->now_p[0] = &r2->dataType;
- r2->remainSize = 7;
- r2->ack = 1;
- r2->payloadSize = 0;
- r2->bmSlot = r6;
- r2->state = SLOT_STATE_RECV_START;
- gRfuLinkStatus->recvSlotNIFlag |= r6;
+ NI_comm->errorCode = 0;
+ *llFrameSize_p -= llFrameSize;
+ NI_comm->now_p[0] = &NI_comm->dataType;
+ NI_comm->remainSize = 7;
+ NI_comm->ack = 1;
+ NI_comm->payloadSize = 0;
+ NI_comm->bmSlot = bm_slot_flag;
+ NI_comm->state = SLOT_STATE_RECV_START;
+ gRfuLinkStatus->recvSlotNIFlag |= bm_slot_flag;
}
}
}
-static void rfu_STC_NI_initSlot_asRecvDataEntity(u8 r5, struct NIComm *r4)
+static void rfu_STC_NI_initSlot_asRecvDataEntity(u8 bm_slot_id, struct NIComm *NI_comm)
{
- u8 r1, r3;
+ u8 bm_slot_flag, win_id;
- if (r4->dataType == 1)
+ if (NI_comm->dataType == 1)
{
- r4->now_p[0] = (void *)&gRfuLinkStatus->partner[r5].serialNo;
+ NI_comm->now_p[0] = (void *)&gRfuLinkStatus->partner[bm_slot_id].serialNo;
}
else
{
- if (r4->dataSize > gRfuSlotStatusNI[r5]->recvBufferSize)
+ if (NI_comm->dataSize > gRfuSlotStatusNI[bm_slot_id]->recvBufferSize)
{
- r1 = 1 << r5;
- gRfuStatic->recvErrorFlag |= r1;
- gRfuLinkStatus->recvSlotNIFlag &= ~r1;
- r4->errorCode = ERR_RECV_BUFF_OVER;
- r4->state = SLOT_STATE_RECV_FAILED;
- rfu_STC_releaseFrame(r5, 1, r4);
+ bm_slot_flag = 1 << bm_slot_id;
+ gRfuStatic->recvErrorFlag |= bm_slot_flag;
+ gRfuLinkStatus->recvSlotNIFlag &= ~bm_slot_flag;
+ NI_comm->errorCode = ERR_RECV_BUFF_OVER;
+ NI_comm->state = SLOT_STATE_RECV_FAILED;
+ rfu_STC_releaseFrame(bm_slot_id, 1, NI_comm);
return;
}
- r4->now_p[0] = gRfuSlotStatusNI[r5]->recvBuffer;
+ NI_comm->now_p[0] = gRfuSlotStatusNI[bm_slot_id]->recvBuffer;
}
- for (r3 = 0; r3 < WINDOW_COUNT; ++r3)
+ for (win_id = 0; win_id < WINDOW_COUNT; ++win_id)
{
- r4->n[r3] = 0;
- r4->now_p[r3] = &r4->now_p[0][r4->payloadSize * r3];
+ NI_comm->n[win_id] = 0;
+ NI_comm->now_p[win_id] = &NI_comm->now_p[0][NI_comm->payloadSize * win_id];
}
- r4->remainSize = r4->dataSize;
- r4->state = SLOT_STATE_RECEIVING;
+ NI_comm->remainSize = NI_comm->dataSize;
+ NI_comm->state = SLOT_STATE_RECEIVING;
}
static void rfu_NI_checkCommFailCounter(void)
{
- u16 r12;
- u32 r7;
- u8 r2, r3;
+ u16 imeBak;
+ u32 recvRenewalFlag;
+ u8 bm_slot_flag, bm_slot_id;
if (gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag)
{
- r12 = REG_IME;
+ imeBak = REG_IME;
REG_IME = 0;
- r7 = gRfuStatic->recvRenewalFlag >> 4;
- for (r3 = 0; r3 < RFU_CHILD_MAX; ++r3)
+ recvRenewalFlag = gRfuStatic->recvRenewalFlag >> 4;
+ for (bm_slot_id = 0; bm_slot_id < RFU_CHILD_MAX; ++bm_slot_id)
{
- r2 = 1 << r3;
- if (gRfuLinkStatus->sendSlotNIFlag & r2
- && !(gRfuStatic->recvRenewalFlag & r2))
- ++gRfuSlotStatusNI[r3]->send.failCounter;
- if (gRfuLinkStatus->recvSlotNIFlag & r2
- && !(r7 & r2))
- ++gRfuSlotStatusNI[r3]->recv.failCounter;
+ bm_slot_flag = 1 << bm_slot_id;
+ if (gRfuLinkStatus->sendSlotNIFlag & bm_slot_flag
+ && !(gRfuStatic->recvRenewalFlag & bm_slot_flag))
+ ++gRfuSlotStatusNI[bm_slot_id]->send.failCounter;
+ if (gRfuLinkStatus->recvSlotNIFlag & bm_slot_flag
+ && !(recvRenewalFlag & bm_slot_flag))
+ ++gRfuSlotStatusNI[bm_slot_id]->recv.failCounter;
}
gRfuStatic->recvRenewalFlag = 0;
- REG_IME = r12;
+ REG_IME = imeBak;
}
}
diff --git a/src/librfu_sio32id.c b/src/librfu_sio32id.c
index fc5701986..b6623540f 100644
--- a/src/librfu_sio32id.c
+++ b/src/librfu_sio32id.c
@@ -4,44 +4,56 @@ static void Sio32IDIntr(void);
static void Sio32IDInit(void);
static s32 Sio32IDMain(void);
+struct RfuSIO32Id
+{
+ u8 MS_mode;
+ u8 state;
+ u16 count;
+ u16 send_id;
+ u16 recv_id;
+ u16 unk8; // unused
+ u16 lastId;
+};
+
struct RfuSIO32Id gRfuSIO32Id;
static const u16 Sio32ConnectionData[] = { 0x494e, 0x544e, 0x4e45, 0x4f44 }; // NINTENDO
static const char Sio32IDLib_Var[] = "Sio32ID_030820";
-s32 AgbRFU_checkID(u8 r5)
+s32 AgbRFU_checkID(u8 maxTries)
{
- u16 r8;
- vu16 *r4;
- s32 r6;
+ u16 ieBak;
+ vu16 *regTMCNTL;
+ s32 id;
+ // Interrupts must be enabled
if (REG_IME == 0)
return -1;
- r8 = REG_IE;
+ ieBak = REG_IE;
gSTWIStatus->state = 10;
STWI_set_Callback_ID(Sio32IDIntr);
Sio32IDInit();
- r4 = &REG_TMCNT_L(gSTWIStatus->timerSelect);
- r5 *= 8;
- while (--r5 != 0xFF)
+ regTMCNTL = &REG_TMCNT_L(gSTWIStatus->timerSelect);
+ maxTries *= 8;
+ while (--maxTries != 0xFF)
{
- r6 = Sio32IDMain();
- if (r6 != 0)
+ id = Sio32IDMain();
+ if (id != 0)
break;
- r4[1] = 0;
- r4[0] = 0;
- r4[1] = TIMER_1024CLK | TIMER_ENABLE;
- while (r4[0] < 32)
+ regTMCNTL[1] = 0;
+ regTMCNTL[0] = 0;
+ regTMCNTL[1] = TIMER_1024CLK | TIMER_ENABLE;
+ while (regTMCNTL[0] < 32)
;
- r4[1] = 0;
- r4[0] = 0;
+ regTMCNTL[1] = 0;
+ regTMCNTL[0] = 0;
}
REG_IME = 0;
- REG_IE = r8;
+ REG_IE = ieBak;
REG_IME = 1;
gSTWIStatus->state = 0;
STWI_set_Callback_ID(NULL);
- return r6;
+ return id;
}
static void Sio32IDInit(void)
@@ -58,107 +70,105 @@ static void Sio32IDInit(void)
static s32 Sio32IDMain(void)
{
- u8 r12;
-
- switch (r12 = gRfuSIO32Id.unk1)
+ switch (gRfuSIO32Id.state)
{
case 0:
- gRfuSIO32Id.unk0 = 1;
+ gRfuSIO32Id.MS_mode = AGB_CLK_MASTER;
REG_SIOCNT |= SIO_38400_BPS;
- REG_IME = r12;
+ REG_IME = 0;
REG_IE |= INTR_FLAG_SERIAL;
REG_IME = 1;
- gRfuSIO32Id.unk1 = 1;
+ gRfuSIO32Id.state = 1;
*(vu8 *)&REG_SIOCNT |= SIO_ENABLE;
break;
case 1:
- if (gRfuSIO32Id.unkA == 0)
+ if (gRfuSIO32Id.lastId == 0)
{
- if (gRfuSIO32Id.unk0 == 1)
+ if (gRfuSIO32Id.MS_mode == AGB_CLK_MASTER)
{
- if (gRfuSIO32Id.unk2 == 0)
+ if (gRfuSIO32Id.count == 0)
{
- REG_IME = gRfuSIO32Id.unk2;
+ REG_IME = 0;
REG_SIOCNT |= SIO_ENABLE;
- REG_IME = r12;
+ REG_IME = 1;
}
}
- else if (gRfuSIO32Id.unk4 != 0x8001 && !gRfuSIO32Id.unk2)
+ else if (gRfuSIO32Id.send_id != RFU_ID && !gRfuSIO32Id.count)
{
- REG_IME = gRfuSIO32Id.unk2;
+ REG_IME = 0;
REG_IE &= ~INTR_FLAG_SERIAL;
- REG_IME = r12;
- REG_SIOCNT = gRfuSIO32Id.unk2;
+ REG_IME = 1;
+ REG_SIOCNT = 0;
REG_SIOCNT = SIO_32BIT_MODE;
REG_IF = INTR_FLAG_SERIAL;
REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE;
- REG_IME = gRfuSIO32Id.unk2;
+ REG_IME = 0;
REG_IE |= INTR_FLAG_SERIAL;
- REG_IME = r12;
+ REG_IME = 1;
}
break;
}
else
{
- gRfuSIO32Id.unk1 = 2;
+ gRfuSIO32Id.state = 2;
// fallthrough
}
default:
- return gRfuSIO32Id.unkA;
+ return gRfuSIO32Id.lastId;
}
return 0;
}
static void Sio32IDIntr(void)
{
- u32 r5;
- u16 r0;
+ u32 regSIODATA32;
+ u16 delay;
#ifndef NONMATCHING
- register u32 r1 asm("r1");
- register u16 r0_ asm("r0");
+ register u32 rfuSIO32IdUnk0_times_16 asm("r1");
+ register u16 negRfuSIO32IdUnk6 asm("r0");
#else
- u32 r1;
- u16 r0_;
+ u32 rfuSIO32IdUnk0_times_16;
+ u16 negRfuSIO32IdUnk6;
#endif
- r5 = REG_SIODATA32;
- if (gRfuSIO32Id.unk0 != 1)
+ regSIODATA32 = REG_SIODATA32;
+ if (gRfuSIO32Id.MS_mode != AGB_CLK_MASTER)
REG_SIOCNT |= SIO_ENABLE;
- r1 = 16 * gRfuSIO32Id.unk0; // to handle side effect of inline asm
- r1 = (r5 << r1) >> 16;
- r5 = (r5 << 16 * (1 - gRfuSIO32Id.unk0)) >> 16;
- if (gRfuSIO32Id.unkA == 0)
+ rfuSIO32IdUnk0_times_16 = 16 * gRfuSIO32Id.MS_mode; // to handle side effect of inline asm
+ rfuSIO32IdUnk0_times_16 = (regSIODATA32 << rfuSIO32IdUnk0_times_16) >> 16;
+ regSIODATA32 = (regSIODATA32 << 16 * (1 - gRfuSIO32Id.MS_mode)) >> 16;
+ if (gRfuSIO32Id.lastId == 0)
{
- if (r1 == gRfuSIO32Id.unk6)
+ if (rfuSIO32IdUnk0_times_16 == gRfuSIO32Id.recv_id)
{
- if (gRfuSIO32Id.unk2 > 3)
+ if (gRfuSIO32Id.count > 3)
{
- gRfuSIO32Id.unkA = r5;
+ gRfuSIO32Id.lastId = regSIODATA32;
}
- else if (r1 == (u16)~gRfuSIO32Id.unk4)
+ else if (rfuSIO32IdUnk0_times_16 == (u16)~gRfuSIO32Id.send_id)
{
- r0_ = ~gRfuSIO32Id.unk6;
- if (r5 == r0_)
- ++gRfuSIO32Id.unk2;
+ negRfuSIO32IdUnk6 = ~gRfuSIO32Id.recv_id;
+ if (regSIODATA32 == negRfuSIO32IdUnk6)
+ ++gRfuSIO32Id.count;
}
}
else
{
- gRfuSIO32Id.unk2 = gRfuSIO32Id.unkA;
+ gRfuSIO32Id.count = 0;
}
}
- if (gRfuSIO32Id.unk2 < 4)
- gRfuSIO32Id.unk4 = *(gRfuSIO32Id.unk2 + Sio32ConnectionData);
+ if (gRfuSIO32Id.count < 4)
+ gRfuSIO32Id.send_id = *(gRfuSIO32Id.count + Sio32ConnectionData);
else
- gRfuSIO32Id.unk4 = 0x8001;
- gRfuSIO32Id.unk6 = ~r5;
- REG_SIODATA32 = (gRfuSIO32Id.unk4 << 16 * (1 - gRfuSIO32Id.unk0))
- + (gRfuSIO32Id.unk6 << 16 * gRfuSIO32Id.unk0);
- if (gRfuSIO32Id.unk0 == 1 && (gRfuSIO32Id.unk2 || r5 == 0x494E))
+ gRfuSIO32Id.send_id = RFU_ID;
+ gRfuSIO32Id.recv_id = ~regSIODATA32;
+ REG_SIODATA32 = (gRfuSIO32Id.send_id << 16 * (1 - gRfuSIO32Id.MS_mode))
+ + (gRfuSIO32Id.recv_id << 16 * gRfuSIO32Id.MS_mode);
+ if (gRfuSIO32Id.MS_mode == AGB_CLK_MASTER && (gRfuSIO32Id.count != 0 || regSIODATA32 == 0x494e))
{
- for (r0 = 0; r0 < 600; ++r0)
+ for (delay = 0; delay < 600; ++delay)
;
- if (gRfuSIO32Id.unkA == 0)
+ if (gRfuSIO32Id.lastId == 0)
REG_SIOCNT |= SIO_ENABLE;
}
}
diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c
index b88f21737..0287b358a 100644
--- a/src/librfu_stwi.c
+++ b/src/librfu_stwi.c
@@ -28,8 +28,8 @@ void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, b
}
gSTWIStatus->rxPacket = &interruptStruct->rxPacketAlloc;
gSTWIStatus->txPacket = &interruptStruct->txPacketAlloc;
- gSTWIStatus->msMode = 1;
- gSTWIStatus->state = 0;
+ gSTWIStatus->msMode = AGB_CLK_MASTER;
+ gSTWIStatus->state = 0; // master send req
gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0;
gSTWIStatus->ackLength = 0;
@@ -39,7 +39,7 @@ void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, b
gSTWIStatus->timerActive = 0;
gSTWIStatus->error = 0;
gSTWIStatus->recoveryCount = 0;
- gSTWIStatus->unk_2c = 0;
+ gSTWIStatus->sending = 0;
REG_RCNT = 0x100; // TODO: mystery bit?
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
STWI_init_Callback_M();
@@ -71,7 +71,7 @@ void AgbRFU_SoftReset(void)
*timerH = 3;
REG_RCNT = 0x80A0;
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
- gSTWIStatus->state = 0;
+ gSTWIStatus->state = 0; // master send req
gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0;
gSTWIStatus->reqActiveCommand = 0;
@@ -81,9 +81,9 @@ void AgbRFU_SoftReset(void)
gSTWIStatus->timerState = 0;
gSTWIStatus->timerActive = 0;
gSTWIStatus->error = 0;
- gSTWIStatus->msMode = 1;
+ gSTWIStatus->msMode = AGB_CLK_MASTER;
gSTWIStatus->recoveryCount = 0;
- gSTWIStatus->unk_2c = 0;
+ gSTWIStatus->sending = 0;
}
void STWI_set_MS_mode(u8 mode)
@@ -131,12 +131,12 @@ void STWI_set_Callback_S(void (*callbackS)(u16))
void STWI_set_Callback_ID(void (*func)(void)) // name in SDK, but is actually setting a function pointer
{
- gSTWIStatus->unk_20 = func;
+ gSTWIStatus->callbackID = func;
}
u16 STWI_poll_CommandEnd(void)
{
- while (gSTWIStatus->unk_2c == TRUE)
+ while (gSTWIStatus->sending == 1)
;
return gSTWIStatus->error;
}
@@ -195,7 +195,7 @@ void STWI_send_ConfigStatusREQ(void)
}
}
-void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data)
+void STWI_send_GameConfigREQ(const u8 *serial_gname, const u8 *uname)
{
u8 *packetBytes;
s32 i;
@@ -203,29 +203,28 @@ void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data)
if (!STWI_init(ID_GAME_CONFIG_REQ))
{
gSTWIStatus->reqLength = 6;
- // TODO: what is unk1
packetBytes = gSTWIStatus->txPacket->rfuPacket8.data;
packetBytes += sizeof(u32);
- *(u16 *)packetBytes = *(u16 *)unk1;
+ *(u16 *)packetBytes = *(u16 *)serial_gname;
packetBytes += sizeof(u16);
- unk1 += sizeof(u16);
+ serial_gname += sizeof(u16);
for (i = 0; i < 14; ++i)
{
- *packetBytes = *unk1;
+ *packetBytes = *serial_gname;
++packetBytes;
- ++unk1;
+ ++serial_gname;
}
for (i = 0; i < 8; ++i)
{
- *packetBytes = *data;
+ *packetBytes = *uname;
++packetBytes;
- ++data;
+ ++uname;
}
STWI_start_Command();
}
}
-void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3)
+void STWI_send_SystemConfigREQ(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer)
{
if (!STWI_init(ID_SYSTEM_CONFIG_REQ))
{
@@ -234,9 +233,9 @@ void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3)
gSTWIStatus->reqLength = 1;
packetBytes = gSTWIStatus->txPacket->rfuPacket8.data;
packetBytes += sizeof(u32);
- *packetBytes++ = unk3;
- *packetBytes++ = unk2;
- *(u16*)packetBytes = unk1;
+ *packetBytes++ = mcTimer;
+ *packetBytes++ = maxMFrame;
+ *(u16*)packetBytes = availSlotFlag;
STWI_start_Command();
}
}
@@ -499,20 +498,17 @@ static void STWI_intr_timer(void)
STWI_stop_timer();
STWI_reset_ClockCounter();
if (gSTWIStatus->callbackM != NULL)
- gSTWIStatus->callbackM(255, 0);
+ gSTWIStatus->callbackM(ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ, 0);
break;
}
}
-static void STWI_set_timer(u8 unk)
+static void STWI_set_timer(u8 count)
{
- vu16 *timerL;
- vu16 *timerH;
-
- timerL = &REG_TMCNT_L(gSTWIStatus->timerSelect);
- timerH = &REG_TMCNT_H(gSTWIStatus->timerSelect);
+ vu16 *timerL = &REG_TMCNT_L(gSTWIStatus->timerSelect);
+ vu16 *timerH = &REG_TMCNT_H(gSTWIStatus->timerSelect);
REG_IME = 0;
- switch (unk)
+ switch (count)
{
case 50:
*timerL = 0xFCCB;
@@ -543,25 +539,31 @@ static void STWI_stop_timer(void)
REG_TMCNT_H(gSTWIStatus->timerSelect) = 0;
}
+/*
+ * Set up STWI to send REQ. Returns 1 if error (see below).
+ */
static u16 STWI_init(u8 request)
{
if (!REG_IME)
{
+ // Can't start sending if IME is disabled.
gSTWIStatus->error = ERR_REQ_CMD_IME_DISABLE;
if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(request, gSTWIStatus->error);
return TRUE;
}
- else if (gSTWIStatus->unk_2c == TRUE)
+ else if (gSTWIStatus->sending == 1)
{
+ // Already sending something. Cancel and error.
gSTWIStatus->error = ERR_REQ_CMD_SENDING;
- gSTWIStatus->unk_2c = FALSE;
+ gSTWIStatus->sending = 0;
if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(request, gSTWIStatus->error);
return TRUE;
}
- else if(!gSTWIStatus->msMode)
+ else if (gSTWIStatus->msMode == AGB_CLK_SLAVE)
{
+ // Can't send if clock slave
gSTWIStatus->error = ERR_REQ_CMD_CLOCK_SLAVE;
if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(request, gSTWIStatus->error, gSTWIStatus);
@@ -569,9 +571,10 @@ static u16 STWI_init(u8 request)
}
else
{
- gSTWIStatus->unk_2c = TRUE;
+ // Good to go, start sending
+ gSTWIStatus->sending = 1;
gSTWIStatus->reqActiveCommand = request;
- gSTWIStatus->state = 0;
+ gSTWIStatus->state = 0; // master send req
gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0;
gSTWIStatus->ackLength = 0;
@@ -595,7 +598,7 @@ static s32 STWI_start_Command(void)
// but the cast here is required to avoid register issue
*(u32 *)gSTWIStatus->txPacket->rfuPacket8.data = 0x99660000 | (gSTWIStatus->reqLength << 8) | gSTWIStatus->reqActiveCommand;
REG_SIODATA32 = gSTWIStatus->txPacket->rfuPacket32.command;
- gSTWIStatus->state = 0;
+ gSTWIStatus->state = 0; // master send req
gSTWIStatus->reqNext = 1;
imeTemp = REG_IME;
REG_IME = 0;
@@ -608,7 +611,7 @@ static s32 STWI_start_Command(void)
static s32 STWI_restart_Command(void)
{
- if (gSTWIStatus->recoveryCount <= 1)
+ if (gSTWIStatus->recoveryCount < 2)
{
++gSTWIStatus->recoveryCount;
STWI_start_Command();
@@ -618,17 +621,17 @@ static s32 STWI_restart_Command(void)
if (gSTWIStatus->reqActiveCommand == ID_MS_CHANGE_REQ || gSTWIStatus->reqActiveCommand == ID_DATA_TX_AND_CHANGE_REQ || gSTWIStatus->reqActiveCommand == ID_UNK35_REQ || gSTWIStatus->reqActiveCommand == ID_RESUME_RETRANSMIT_AND_CHANGE_REQ)
{
gSTWIStatus->error = ERR_REQ_CMD_CLOCK_DRIFT;
- gSTWIStatus->unk_2c = 0;
+ gSTWIStatus->sending = 0;
if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error);
}
else
{
gSTWIStatus->error = ERR_REQ_CMD_CLOCK_DRIFT;
- gSTWIStatus->unk_2c = 0;
+ gSTWIStatus->sending = 0;
if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error);
- gSTWIStatus->state = 4; // TODO: what's 4
+ gSTWIStatus->state = 4; // error
}
}
return 0;
@@ -636,7 +639,7 @@ static s32 STWI_restart_Command(void)
static s32 STWI_reset_ClockCounter(void)
{
- gSTWIStatus->state = 5; // TODO: what is 5
+ gSTWIStatus->state = 5; // slave receive req init
gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0;
REG_SIODATA32 = (1 << 31);
diff --git a/src/link.c b/src/link.c
index dfb21f126..f5c850d63 100644
--- a/src/link.c
+++ b/src/link.c
@@ -235,7 +235,7 @@ bool8 IsWirelessAdapterConnected(void)
sub_800B1F4();
sub_80F86F4();
sub_80FB128(TRUE);
- if (sub_80FD3A4() == RFU_ID)
+ if (rfu_LMAN_REQBN_softReset_and_checkID() == RFU_ID)
{
rfu_REQ_stopMode();
rfu_waitREQComplete();
@@ -721,7 +721,7 @@ void sub_8009FE8(void)
{
if (gWirelessCommType)
{
- sub_80F9828();
+ StartSendingKeysToRfu();
}
gLinkCallback = sub_800A040;
}
@@ -1448,7 +1448,7 @@ static void CheckErrorStatus(void)
}
}
-void sub_800ACBC(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06)
+void SetLinkErrorFromRfu(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06)
{
sLinkErrorBuffer.status = status;
sLinkErrorBuffer.lastSendQueueCount = lastSendQueueCount;
@@ -1670,8 +1670,8 @@ bool8 HandleLinkConnection(void)
}
else
{
- r4 = sub_80FAE94();
- r5 = sub_80FAEF0();
+ r4 = LinkRfuMain1();
+ r5 = LinkRfuMain2();
if (sub_8058318() == TRUE)
{
if (r4 == TRUE || IsRfuRecvQueueEmpty() || r5)
diff --git a/src/link_rfu.c b/src/link_rfu.c
index 8ab76ffd5..89245398d 100644
--- a/src/link_rfu.c
+++ b/src/link_rfu.c
@@ -2,190 +2,188 @@
#include "librfu.h"
#include "link_rfu.h"
-struct UnkRfuStruct_1 gUnknown_3005E10;
+LINK_MANAGER lman;
-static void sub_80FD4E4(void);
-static void sub_80FDC28(u32 a0);
-static void sub_80FDC98(u16 reqCommandId, u16 reqResult);
-static void sub_80FE394(u16 reqCommandId);
-static void sub_80FE418(void);
-static void sub_80FE63C(void);
-static void sub_80FE6F0(void);
-static void sub_80FE74C(void);
-static u8 sub_80FE778(void);
-static void sub_80FE7F0(u8 a0, u8 a1);
-static void sub_80FE818(u8 bmDisconnectSlot);
-static void sub_80FE83C(u8 a0);
-static void sub_80FE918(void);
-static void sub_80FEAF4(void);
+static void rfu_LMAN_clearVariables(void);
+static void rfu_LMAN_settingPCSWITCH(u32 rand);
+static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult);
+static void rfu_LMAN_MSC_callback(u16 reqCommandId);
+static void rfu_LMAN_PARENT_checkRecvChildName(void);
+static void rfu_LMAN_CHILD_checkSendChildName(void);
+static void rfu_LMAN_CHILD_checkSendChildName2(void);
+static void rfu_LMAN_CHILD_linkRecoveryProcess(void);
+static u8 rfu_LMAN_CHILD_checkEnableParentCandidate(void);
+static void rfu_LMAN_occureCallback(u8 msg, u8 param_count);
+static void rfu_LMAN_disconnect(u8 bmDisconnectSlot);
+static void rfu_LMAN_reflectCommunicationStatus(u8 bm_disconnectedSlot);
+static void rfu_LMAN_checkNICommunicateStatus(void);
+static void rfu_LMAN_managerChangeAgbClockMaster(void);
-u32 sub_80FD3A4(void)
+u32 rfu_LMAN_REQBN_softReset_and_checkID(void)
{
u32 id = rfu_REQBN_softReset_and_checkID();
if (id == RFU_ID)
- gUnknown_3005E10.unk_08 = 1;
- if (gUnknown_3005E10.unk_04 != 0x17 && gUnknown_3005E10.unk_04 != 0x01)
+ lman.RFU_powerOn_flag = 1;
+ if (lman.state != LMAN_FORCED_STOP_AND_RFU_RESET && lman.state != LMAN_STATE_SOFT_RESET_AND_CHECK_ID)
{
- gUnknown_3005E10.unk_05 = 0;
- gUnknown_3005E10.unk_04 = 0;
+ lman.state = lman.next_state = LMAN_STATE_READY;
}
- gUnknown_3005E10.unk_07 = 0;
- gUnknown_3005E10.unk_0d = 0;
- gUnknown_3005E10.unk_01 = 0;
- gUnknown_3005E10.unk_00 = 0;
- gUnknown_3005E10.unk_06 = -1;
- sub_80FEAF4();
+ lman.pcswitch_flag = 0;
+ lman.reserveDisconnectSlot_flag = 0;
+ lman.acceptCount = 0;
+ lman.acceptSlot_flag = 0;
+ lman.parent_child = MODE_NEUTRAL;
+ rfu_LMAN_managerChangeAgbClockMaster();
return id;
}
-void LinkRfu_REQ_SendData_HandleParentRelationship(u8 clockChangeFlag)
+void rfu_LMAN_REQ_sendData(u8 clockChangeFlag)
{
if (gRfuLinkStatus->parentChild == MODE_CHILD)
{
- if (gUnknown_3005E10.unk_02 == TRUE)
+ if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_ON)
clockChangeFlag = TRUE;
else
clockChangeFlag = FALSE;
}
else
- gUnknown_3005E10.unk_03 = 0;
+ lman.parentAck_flag = 0;
rfu_REQ_sendData(clockChangeFlag);
}
-s32 sub_80FD430(void (*func1)(u8, u8), void (*func2)(u16))
+u8 rfu_LMAN_initializeManager(void (*LMAN_callback_p)(u8, u8), void (*MSC_callback_p)(u16))
{
- if (func1 == NULL)
+ if (LMAN_callback_p == NULL)
{
- return 4;
+ return LMAN_ERROR_ILLEGAL_PARAMETER;
}
- CpuFill16(0, &gUnknown_3005E10, sizeof(struct UnkRfuStruct_1));
- gUnknown_3005E10.unk_06 = -1;
- gUnknown_3005E10.unk_40 = func1;
- gUnknown_3005E10.unk_44 = func2;
- rfu_setMSCCallback(sub_80FE394);
- rfu_setREQCallback(sub_80FDC98);
+ CpuFill16(0, &lman, sizeof(struct linkManagerTag));
+ lman.parent_child = MODE_NEUTRAL;
+ lman.LMAN_callback = LMAN_callback_p;
+ lman.MSC_callback = MSC_callback_p;
+ rfu_setMSCCallback(rfu_LMAN_MSC_callback);
+ rfu_setREQCallback(rfu_LMAN_REQ_callback);
return 0;
}
-static void sub_80FD484(void)
+static void rfu_LMAN_endManager(void)
{
- CpuFill16(0, &gUnknown_3005E10, offsetof(struct UnkRfuStruct_1, unk_40));
- gUnknown_3005E10.unk_06 = -1;
+ CpuFill16(0, &lman, sizeof(struct linkManagerTag) - 8);
+ lman.parent_child = MODE_NEUTRAL;
}
-void sub_80FD4B0(const struct UnkLinkRfuStruct_02022B2C *unk0)
+void rfu_LMAN_initializeRFU(INIT_PARAM *init_parameters)
{
- sub_80FD4E4();
- gUnknown_3005E10.unk_04 = 1;
- gUnknown_3005E10.unk_05 = 2;
- gUnknown_3005E10.unk_3c = unk0;
- gUnknown_3005E10.unk_09 = unk0->unk_11;
- gUnknown_3005E10.unk_32 = unk0->unk_12;
- gUnknown_3005E10.unk_18 = unk0->unk_14;
- if (unk0->unk_10)
+ rfu_LMAN_clearVariables();
+ lman.state = LMAN_STATE_SOFT_RESET_AND_CHECK_ID;
+ lman.next_state = LMAN_STATE_RESET;
+ lman.init_param = init_parameters;
+ lman.linkRecovery_enable = init_parameters->linkRecovery_enable;
+ lman.linkRecoveryTimer.count_max = init_parameters->linkRecovery_period;
+ lman.NI_failCounter_limit = init_parameters->NI_failCounter_limit;
+ if (init_parameters->fastSearchParent_flag)
{
- gUnknown_3005E10.unk_0b = 1;
+ lman.fastSearchParent_flag = 1;
}
}
-static void sub_80FD4E4(void)
+static void rfu_LMAN_clearVariables(void)
{
u8 i;
- gUnknown_3005E10.unk_05 = 0;
- gUnknown_3005E10.unk_04 = 0;
- gUnknown_3005E10.unk_06 = -1;
- gUnknown_3005E10.unk_07 = 0;
- gUnknown_3005E10.unk_10 = 0;
- gUnknown_3005E10.unk_0c = 0;
- gUnknown_3005E10.unk_24 = 0;
- gUnknown_3005E10.unk_30 = 0;
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ lman.parent_child = MODE_NEUTRAL;
+ lman.pcswitch_flag = 0;
+ lman.child_slot = 0;
+ lman.connectSlot_flag_old = 0;
+ lman.nameAcceptTimer.active = 0;
+ lman.linkRecoveryTimer.active = 0;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- gUnknown_3005E10.unk_28[i] = 0;
- gUnknown_3005E10.unk_34[i] = 0;
+ lman.nameAcceptTimer.count[i] = 0;
+ lman.linkRecoveryTimer.count[i] = 0;
}
}
-void sub_80FD52C(void)
+void rfu_LMAN_powerDownRFU(void)
{
- gUnknown_3005E10.unk_04 = 0x15;
+ lman.state = LMAN_STATE_STOP_MODE;
}
-u8 sub_80FD538(u8 r5, u16 r7, u16 r8, const u16 *r6)
+u8 rfu_LMAN_establishConnection(u8 parent_child, u16 connect_period, u16 name_accept_period, u16 *acceptable_serialNo_list)
{
u8 i;
- const u16 *buffer;
+ u16 *serial_list;
- if (gUnknown_3005E10.unk_04 != 0 && (gUnknown_3005E10.unk_04 != 0x08 || r5 != 1))
+ if (lman.state != LMAN_STATE_READY && (lman.state != LMAN_STATE_WAIT_RECV_CHILD_NAME || parent_child != 1))
{
- gUnknown_3005E10.unk_14 = 1;
- sub_80FE7F0(0xf3, 0x01);
- return 1;
+ lman.param[0] = 1;
+ rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1);
+ return LMAN_ERROR_MANAGER_BUSY;
}
if (rfu_getMasterSlave() == AGB_CLK_SLAVE)
{
- gUnknown_3005E10.unk_14 = 2;
- sub_80FE7F0(0xf3, 0x01);
- return 2;
+ lman.param[0] = 2;
+ rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1);
+ return LMAN_ERROR_AGB_CLK_SLAVE;
}
- for (i = 0, buffer = r6; i < 16; i++)
+ for (i = 0, serial_list = acceptable_serialNo_list; i < 16; i++)
{
- if (*buffer++ == 0xFFFF)
+ if (*serial_list++ == 0xFFFF)
{
break;
}
}
if (i == 16)
{
- gUnknown_3005E10.unk_14 = 4;
- sub_80FE7F0(0xf3, 0x01);
- return 4;
+ lman.param[0] = 4;
+ rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1);
+ return LMAN_ERROR_ILLEGAL_PARAMETER;
}
- if (r5 > 1)
+ if (parent_child > 1)
{
- gUnknown_3005E10.unk_07 = 1;
- r5 = 1;
- r7 = 0;
+ lman.pcswitch_flag = 1;
+ parent_child = 1;
+ connect_period = 0;
}
else
{
- gUnknown_3005E10.unk_07 = 0;
+ lman.pcswitch_flag = 0;
}
- if (r5 != 0)
+ if (parent_child != 0)
{
- gUnknown_3005E10.unk_04 = 5;
+ lman.state = LMAN_STATE_START_SEARCH_CHILD;
}
else
{
- gUnknown_3005E10.unk_04 = 9;
- if (gUnknown_3005E10.unk_0b)
+ lman.state = LMAN_STATE_START_SEARCH_PARENT;
+ if (lman.fastSearchParent_flag)
{
- gUnknown_3005E10.unk_0b = 2;
+ lman.fastSearchParent_flag = 2;
}
}
- gUnknown_3005E10.unk_06 = r5;
- gUnknown_3005E10.unk_1a = r7;
- gUnknown_3005E10.unk_26 = r8;
- gUnknown_3005E10.unk_20 = r6;
+ lman.parent_child = parent_child;
+ lman.connect_period = connect_period;
+ lman.nameAcceptTimer.count_max = name_accept_period;
+ lman.acceptable_serialNo_list = acceptable_serialNo_list;
return 0;
}
-u8 sub_80FD610(u16 parentId, u16 unk_1a)
+u8 rfu_LMAN_CHILD_connectParent(u16 parentId, u16 connect_period)
{
u8 i;
- if (gUnknown_3005E10.unk_04 != 0 && (gUnknown_3005E10.unk_04 < 9 || gUnknown_3005E10.unk_04 > 11))
+ if (lman.state != LMAN_STATE_READY && (lman.state < 9 || lman.state > 11))
{
- gUnknown_3005E10.unk_14 = 1;
- sub_80FE7F0(0xF3, 0x01);
- return 1;
+ lman.param[0] = 1;
+ rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1);
+ return LMAN_ERROR_MANAGER_BUSY;
}
if (rfu_getMasterSlave() == AGB_CLK_SLAVE)
{
- gUnknown_3005E10.unk_14 = 2;
- sub_80FE7F0(0xF3, 0x01);
- return 2;
+ lman.param[0] = 2;
+ rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1);
+ return LMAN_ERROR_AGB_CLK_SLAVE;
}
for (i = 0; i < gRfuLinkStatus->findParentCount; i++)
{
@@ -196,546 +194,549 @@ u8 sub_80FD610(u16 parentId, u16 unk_1a)
}
if (gRfuLinkStatus->findParentCount == 0 || i == gRfuLinkStatus->findParentCount)
{
- gUnknown_3005E10.unk_14 = 3;
- sub_80FE7F0(0xF3, 0x01);
- return 3;
+ lman.param[0] = 3;
+ rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1);
+ return LMAN_ERROR_PID_NOT_FOUND;
}
- if (gUnknown_3005E10.unk_04 == 0 || gUnknown_3005E10.unk_04 == 9)
+ if (lman.state == LMAN_STATE_READY || lman.state == LMAN_STATE_START_SEARCH_PARENT)
{
- gUnknown_3005E10.unk_04 = 12;
- gUnknown_3005E10.unk_05 = 13;
+ lman.state = LMAN_STATE_START_CONNECT_PARENT;
+ lman.next_state = LMAN_STATE_POLL_CONNECT_PARENT;
}
else
{
- gUnknown_3005E10.unk_04 = 11;
- gUnknown_3005E10.unk_05 = 12;
+ lman.state = LMAN_STATE_END_SEARCH_PARENT;
+ lman.next_state = LMAN_STATE_START_CONNECT_PARENT;
}
- gUnknown_3005E10.unk_1e = parentId;
- gUnknown_3005E10.unk_1a = unk_1a;
- if (gUnknown_3005E10.unk_07 != 0)
+ lman.work = parentId;
+ lman.connect_period = connect_period;
+ if (lman.pcswitch_flag != 0)
{
- gUnknown_3005E10.unk_07 = 7;
+ lman.pcswitch_flag = 7;
}
return 0;
}
-static void sub_80FD6F4(u8 lossSlot)
+static void rfu_LMAN_PARENT_stopWaitLinkRecoveryAndDisconnect(u8 bm_targetSlot)
{
u8 i;
- if (lossSlot & gUnknown_3005E10.unk_30)
+ if ((bm_targetSlot & lman.linkRecoveryTimer.active) == 0)
+ return;
+ lman.linkRecoveryTimer.active &= ~bm_targetSlot;
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- gUnknown_3005E10.unk_30 &= ~lossSlot;
- for (i = 0; i < RFU_CHILD_MAX; i++)
- {
- if ((lossSlot >> i) & 1)
- {
- gUnknown_3005E10.unk_34[i] = 0;
- }
- }
- i = gRfuLinkStatus->linkLossSlotFlag & lossSlot;
- if (i)
+ if ((bm_targetSlot >> i) & 1)
{
- sub_80FE818(i);
+ lman.linkRecoveryTimer.count[i] = 0;
}
- gUnknown_3005E10.unk_14 = i;
- sub_80FE7F0(0x33, i);
}
+ i = gRfuLinkStatus->linkLossSlotFlag & bm_targetSlot;
+ if (i)
+ {
+ rfu_LMAN_disconnect(i);
+ }
+ lman.param[0] = i;
+ rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, i);
}
-void sub_80FD760(bool8 a0)
+void rfu_LMAN_stopManager(bool8 forced_stop_and_RFU_reset_flag)
{
- u8 r2;
-
- r2 = 0;
- gUnknown_3005E10.unk_07 = 0;
- if (a0)
+ u8 msg = 0;
+ lman.pcswitch_flag = 0;
+ if (forced_stop_and_RFU_reset_flag)
{
- sub_80FD4E4();
- gUnknown_3005E10.unk_04 = 23;
+ rfu_LMAN_clearVariables();
+ lman.state = LMAN_FORCED_STOP_AND_RFU_RESET;
+ return;
}
- else
+ switch (lman.state)
{
- switch (gUnknown_3005E10.unk_04)
- {
- case 5:
- gUnknown_3005E10.unk_04 = 8;
- gUnknown_3005E10.unk_05 = 0;
- r2 = 0x13;
- break;
- case 6:
- gUnknown_3005E10.unk_04 = 7;
- gUnknown_3005E10.unk_05 = 8;
- break;
- case 7:
- gUnknown_3005E10.unk_04 = 7;
- gUnknown_3005E10.unk_05 = 8;
- break;
- case 8:
- break;
- case 9:
- gUnknown_3005E10.unk_05 = 0;
- gUnknown_3005E10.unk_04 = 0;
- r2 = 0x21;
- break;
- case 10:
- gUnknown_3005E10.unk_04 = 11;
- gUnknown_3005E10.unk_05 = 0;
- break;
- case 11:
- gUnknown_3005E10.unk_04 = 11;
- gUnknown_3005E10.unk_05 = 0;
- break;
- case 12:
- gUnknown_3005E10.unk_05 = 0;
- gUnknown_3005E10.unk_04 = 0;
- r2 = 0x23;
- break;
- case 13:
- gUnknown_3005E10.unk_04 = 14;
- break;
- case 14:
- gUnknown_3005E10.unk_04 = 14;
- break;
- case 15:
- break;
- case 16:
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_11;
- gUnknown_3005E10.unk_05 = gUnknown_3005E10.unk_12;
- sub_80FE818(gRfuLinkStatus->linkLossSlotFlag);
- gUnknown_3005E10.unk_14 = gRfuLinkStatus->linkLossSlotFlag;
- sub_80FE7F0(0x33, 0x01);
- return;
- case 17:
- gUnknown_3005E10.unk_04 = 18;
- break;
- case 18:
- gUnknown_3005E10.unk_04 = 18;
- break;
- default:
- gUnknown_3005E10.unk_05 = 0;
- gUnknown_3005E10.unk_04 = 0;
- r2 = 0x43;
- break;
- }
- if (gUnknown_3005E10.unk_04 == 0)
- {
- sub_80FE7F0(r2, 0);
- }
+ case LMAN_STATE_START_SEARCH_CHILD:
+ lman.state = LMAN_STATE_WAIT_RECV_CHILD_NAME;
+ lman.next_state = LMAN_STATE_READY;
+ msg = LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED;
+ break;
+ case LMAN_STATE_POLL_SEARCH_CHILD:
+ lman.state = LMAN_STATE_END_SEARCH_CHILD;
+ lman.next_state = LMAN_STATE_WAIT_RECV_CHILD_NAME;
+ break;
+ case LMAN_STATE_END_SEARCH_CHILD:
+ lman.state = LMAN_STATE_END_SEARCH_CHILD;
+ lman.next_state = LMAN_STATE_WAIT_RECV_CHILD_NAME;
+ break;
+ case LMAN_STATE_WAIT_RECV_CHILD_NAME:
+ break;
+ case LMAN_STATE_START_SEARCH_PARENT:
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ msg = LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED;
+ break;
+ case LMAN_STATE_POLL_SEARCH_PARENT:
+ lman.state = LMAN_STATE_END_SEARCH_PARENT;
+ lman.next_state = LMAN_STATE_READY;
+ break;
+ case LMAN_STATE_END_SEARCH_PARENT:
+ lman.state = LMAN_STATE_END_SEARCH_PARENT;
+ lman.next_state = LMAN_STATE_READY;
+ break;
+ case LMAN_STATE_START_CONNECT_PARENT:
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ msg = LMAN_MSG_CONNECT_PARENT_FAILED;
+ break;
+ case LMAN_STATE_POLL_CONNECT_PARENT:
+ lman.state = LMAN_STATE_END_CONNECT_PARENT;
+ break;
+ case LMAN_STATE_END_CONNECT_PARENT:
+ lman.state = LMAN_STATE_END_CONNECT_PARENT;
+ break;
+ case LMAN_STATE_SEND_CHILD_NAME:
+ break;
+ case LMAN_STATE_START_LINK_RECOVERY:
+ lman.state = lman.state_bak[0];
+ lman.next_state = lman.state_bak[1];
+ rfu_LMAN_disconnect(gRfuLinkStatus->linkLossSlotFlag);
+ lman.param[0] = gRfuLinkStatus->linkLossSlotFlag;
+ rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, 1);
+ return;
+ case LMAN_STATE_POLL_LINK_RECOVERY:
+ lman.state = LMAN_STATE_END_LINK_RECOVERY;
+ break;
+ case LMAN_STATE_END_LINK_RECOVERY:
+ lman.state = LMAN_STATE_END_LINK_RECOVERY;
+ break;
+ default:
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ msg = LMAN_MSG_MANAGER_STOPPED;
+ break;
+ }
+ if (lman.state == LMAN_STATE_READY)
+ {
+ rfu_LMAN_occureCallback(msg, 0);
}
}
-static bool8 sub_80FD850(u16 reqCommandId)
+static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID)
{
- bool8 retVal;
u8 i;
- u8 bmLinkLossSlot;
- u8 linkLossReason;
- u8 parentBmLinkRecoverySlot;
- u8 flags;
+ u8 bm_linkLossSlot;
+ u8 reason;
+ u8 bm_linkRecoverySlot;
+ u8 bm_disconnectSlot;
- retVal = FALSE;
- rfu_REQBN_watchLink(reqCommandId, &bmLinkLossSlot, &linkLossReason, &parentBmLinkRecoverySlot);
- if (bmLinkLossSlot)
+ bool8 disconnect_occure_flag = FALSE;
+ rfu_REQBN_watchLink(REQ_commandID, &bm_linkLossSlot, &reason, &bm_linkRecoverySlot);
+ if (bm_linkLossSlot)
{
- gUnknown_3005E10.unk_14 = bmLinkLossSlot;
- gUnknown_3005E10.unk_16 = linkLossReason;
- if (gUnknown_3005E10.unk_09)
+ lman.param[0] = bm_linkLossSlot;
+ lman.param[1] = reason;
+ if (lman.linkRecovery_enable)
{
- gUnknown_3005E10.unk_0a = 1;
- if (gUnknown_3005E10.unk_06 == 0 && linkLossReason == REASON_DISCONNECTED)
+ lman.linkRecovery_start_flag = 1;
+ if (lman.parent_child == 0 && reason == REASON_DISCONNECTED)
{
- gUnknown_3005E10.unk_0a = 4;
+ lman.linkRecovery_start_flag = 4;
}
- if (gUnknown_3005E10.unk_0a == 1)
+ if (lman.linkRecovery_start_flag == 1)
{
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((bmLinkLossSlot >> i) & 1)
+ if ((bm_linkLossSlot >> i) & 1)
{
- gUnknown_3005E10.unk_30 |= (1 << i);
- gUnknown_3005E10.unk_34[i] = gUnknown_3005E10.unk_32;
+ lman.linkRecoveryTimer.active |= (1 << i);
+ lman.linkRecoveryTimer.count[i] = lman.linkRecoveryTimer.count_max;
}
}
- sub_80FE7F0(0x31, 0x01);
+ rfu_LMAN_occureCallback(LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY, 1);
}
else
{
- gUnknown_3005E10.unk_0a = 0;
- sub_80FE818(bmLinkLossSlot);
- retVal = TRUE;
- sub_80FE7F0(0x33, 0x01);
+ lman.linkRecovery_start_flag = 0;
+ rfu_LMAN_disconnect(bm_linkLossSlot);
+ disconnect_occure_flag = TRUE;
+ rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, 1);
}
}
else
{
- sub_80FE818(bmLinkLossSlot);
- retVal = TRUE;
- sub_80FE7F0(0x30, 0x02);
+ rfu_LMAN_disconnect(bm_linkLossSlot);
+ disconnect_occure_flag = TRUE;
+ rfu_LMAN_occureCallback(LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED, 2);
}
- sub_80FEAF4();
+ rfu_LMAN_managerChangeAgbClockMaster();
}
if (gRfuLinkStatus->parentChild == MODE_PARENT)
{
- if (parentBmLinkRecoverySlot)
+ if (bm_linkRecoverySlot)
{
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((gUnknown_3005E10.unk_30 >> i) & 1 && (parentBmLinkRecoverySlot >> i) & 1)
+ if ((lman.linkRecoveryTimer.active >> i) & 1 && (bm_linkRecoverySlot >> i) & 1)
{
- gUnknown_3005E10.unk_34[i] = 0;
+ lman.linkRecoveryTimer.count[i] = 0;
}
}
- gUnknown_3005E10.unk_30 &= ~parentBmLinkRecoverySlot;
- gUnknown_3005E10.unk_14 = parentBmLinkRecoverySlot;
- sub_80FE7F0(0x32, 0x01);
+ lman.linkRecoveryTimer.active &= ~bm_linkRecoverySlot;
+ lman.param[0] = bm_linkRecoverySlot;
+ rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_SUCCESSED, 1);
}
- if (gUnknown_3005E10.unk_30)
+ if (lman.linkRecoveryTimer.active)
{
- flags = 0;
+ bm_disconnectSlot = 0;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((gUnknown_3005E10.unk_30 >> i) & 1 && gUnknown_3005E10.unk_34[i] && --gUnknown_3005E10.unk_34[i] == 0)
+ if ((lman.linkRecoveryTimer.active >> i) & 1 && lman.linkRecoveryTimer.count[i] && --lman.linkRecoveryTimer.count[i] == 0)
{
- gUnknown_3005E10.unk_30 &= ~(1 << i);
- flags |= (1 << i);
+ lman.linkRecoveryTimer.active &= ~(1 << i);
+ bm_disconnectSlot |= (1 << i);
}
}
- if (flags)
+ if (bm_disconnectSlot)
{
- sub_80FE818(flags);
- retVal = TRUE;
- gUnknown_3005E10.unk_14 = flags;
- sub_80FE7F0(0x33, 0x01);
+ rfu_LMAN_disconnect(bm_disconnectSlot);
+ disconnect_occure_flag = TRUE;
+ lman.param[0] = bm_disconnectSlot;
+ rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, 1);
}
}
- if (!gUnknown_3005E10.unk_30)
+ if (!lman.linkRecoveryTimer.active)
{
- gUnknown_3005E10.unk_0a = 0;
+ lman.linkRecovery_start_flag = 0;
}
}
- return retVal;
+ return disconnect_occure_flag;
}
-void LinkRfu_syncVBlank_(void)
+void rfu_LMAN_syncVBlank(void)
{
if (rfu_syncVBlank())
{
- sub_80FE7F0(0xF1, 0x00);
- sub_80FEAF4();
+ rfu_LMAN_occureCallback(LMAN_MSG_WATCH_DOG_TIMER_ERROR, 0);
+ rfu_LMAN_managerChangeAgbClockMaster();
}
}
-void sub_80FDA30(u32 a0)
+void rfu_LMAN_manager_entity(u32 rand)
{
- u8 r2;
+ u8 msg;
- if (gUnknown_3005E10.unk_40 == NULL && gUnknown_3005E10.unk_04 != 0)
+ if (lman.LMAN_callback == NULL && lman.state != LMAN_STATE_READY)
{
- gUnknown_3005E10.unk_04 = 0;
+ lman.state = LMAN_STATE_READY;
+ return;
}
- else
+ if (lman.pcswitch_flag)
{
- if (gUnknown_3005E10.unk_07 != 0)
- {
- sub_80FDC28(a0);
- }
- do
+ rfu_LMAN_settingPCSWITCH(rand);
+ }
+ while (1)
+ {
+ if (lman.state != LMAN_STATE_READY)
{
- if (gUnknown_3005E10.unk_04 != 0)
+ rfu_waitREQComplete();
+ lman.active = 1;
+ switch (lman.state)
{
- rfu_waitREQComplete();
- gUnknown_3005E10.unk_0e = 1;
- switch (gUnknown_3005E10.unk_04)
+ case LMAN_FORCED_STOP_AND_RFU_RESET:
+ if (rfu_LMAN_REQBN_softReset_and_checkID() == RFU_ID)
{
- case 23:
- r2 = sub_80FD3A4() == RFU_ID ? 0x44 : 0xFF;
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- sub_80FE7F0(r2, 0);
- break;
- case 1:
- if (sub_80FD3A4() == RFU_ID)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05;
- gUnknown_3005E10.unk_05 = 3;
- }
- else
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- sub_80FE7F0(0xFF, 0);
- }
- break;
- case 2:
- rfu_REQ_reset();
- break;
- case 3:
- rfu_REQ_configSystem(gUnknown_3005E10.unk_3c->availSlotFlag, gUnknown_3005E10.unk_3c->maxMFrame, gUnknown_3005E10.unk_3c->mcTimer);
- break;
- case 4:
- rfu_REQ_configGameData(gUnknown_3005E10.unk_3c->mbootFlag, gUnknown_3005E10.unk_3c->serialNo, (const u8 *)gUnknown_3005E10.unk_3c->gname, gUnknown_3005E10.unk_3c->uname);
- break;
- case 5:
- rfu_REQ_startSearchChild();
- break;
- case 6:
- rfu_REQ_pollSearchChild();
- break;
- case 7:
- rfu_REQ_endSearchChild();
- break;
- case 8:
- break;
- case 9:
- rfu_REQ_startSearchParent();
- break;
- case 10:
- rfu_REQ_pollSearchParent();
- break;
- case 11:
- rfu_REQ_endSearchParent();
- break;
- case 12:
- rfu_REQ_startConnectParent(gUnknown_3005E10.unk_1e);
- break;
- case 13:
- rfu_REQ_pollConnectParent();
- break;
- case 14:
- rfu_REQ_endConnectParent();
- break;
- case 15:
- break;
- case 16:
- rfu_REQ_CHILD_startConnectRecovery(gRfuLinkStatus->linkLossSlotFlag);
- break;
- case 17:
- rfu_REQ_CHILD_pollConnectRecovery();
- break;
- case 18:
- rfu_REQ_CHILD_endConnectRecovery();
- break;
- case 19:
- rfu_REQ_changeMasterSlave();
- break;
- case 20:
- break;
- case 21:
- rfu_REQ_stopMode();
- break;
- case 22:
- break;
+ msg=LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET;
}
- rfu_waitREQComplete();
- gUnknown_3005E10.unk_0e = 0;
+ else
+ {
+ msg=LMAN_MSG_RFU_FATAL_ERROR;
+ }
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_LMAN_occureCallback(msg, 0);
+ break;
+ case LMAN_STATE_SOFT_RESET_AND_CHECK_ID:
+ if (rfu_LMAN_REQBN_softReset_and_checkID() == RFU_ID)
+ {
+ lman.state = lman.next_state;
+ lman.next_state = LMAN_STATE_CONFIG_SYSTEM;
+ }
+ else
+ {
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_LMAN_occureCallback(LMAN_MSG_RFU_FATAL_ERROR, 0);
+ }
+ break;
+ case LMAN_STATE_RESET:
+ rfu_REQ_reset();
+ break;
+ case LMAN_STATE_CONFIG_SYSTEM:
+ rfu_REQ_configSystem(lman.init_param->availSlot_flag, lman.init_param->maxMFrame, lman.init_param->MC_TimerCount);
+ break;
+ case LMAN_STATE_CONFIG_GAME_DATA:
+ rfu_REQ_configGameData(lman.init_param->mboot_flag, lman.init_param->serialNo, (const u8 *)lman.init_param->gameName, lman.init_param->userName);
+ break;
+ case LMAN_STATE_START_SEARCH_CHILD:
+ rfu_REQ_startSearchChild();
+ break;
+ case LMAN_STATE_POLL_SEARCH_CHILD:
+ rfu_REQ_pollSearchChild();
+ break;
+ case LMAN_STATE_END_SEARCH_CHILD:
+ rfu_REQ_endSearchChild();
+ break;
+ case LMAN_STATE_WAIT_RECV_CHILD_NAME:
+ break;
+ case LMAN_STATE_START_SEARCH_PARENT:
+ rfu_REQ_startSearchParent();
+ break;
+ case LMAN_STATE_POLL_SEARCH_PARENT:
+ rfu_REQ_pollSearchParent();
+ break;
+ case LMAN_STATE_END_SEARCH_PARENT:
+ rfu_REQ_endSearchParent();
+ break;
+ case LMAN_STATE_START_CONNECT_PARENT:
+ rfu_REQ_startConnectParent(lman.work);
+ break;
+ case LMAN_STATE_POLL_CONNECT_PARENT:
+ rfu_REQ_pollConnectParent();
+ break;
+ case LMAN_STATE_END_CONNECT_PARENT:
+ rfu_REQ_endConnectParent();
+ break;
+ case LMAN_STATE_SEND_CHILD_NAME:
+ break;
+ case LMAN_STATE_START_LINK_RECOVERY:
+ rfu_REQ_CHILD_startConnectRecovery(gRfuLinkStatus->linkLossSlotFlag);
+ break;
+ case LMAN_STATE_POLL_LINK_RECOVERY:
+ rfu_REQ_CHILD_pollConnectRecovery();
+ break;
+ case LMAN_STATE_END_LINK_RECOVERY:
+ rfu_REQ_CHILD_endConnectRecovery();
+ break;
+ case LMAN_STATE_MS_CHANGE:
+ rfu_REQ_changeMasterSlave();
+ break;
+ case LMAN_STATE_WAIT_CLOCK_MASTER:
+ break;
+ case LMAN_STATE_STOP_MODE:
+ rfu_REQ_stopMode();
+ break;
+ case LMAN_STATE_BACK_STATE:
+ break;
+ default:
+ break;
}
- } while (gUnknown_3005E10.unk_04 == 18 || gUnknown_3005E10.unk_04 == 19);
- if (gRfuLinkStatus->parentChild != MODE_PARENT || !sub_80FD850(0))
- {
- sub_80FE418();
- sub_80FE63C();
- sub_80FE74C();
- sub_80FE918();
+ rfu_waitREQComplete();
+ lman.active = 0;
}
+ if (lman.state == LMAN_STATE_END_LINK_RECOVERY || lman.state == LMAN_STATE_MS_CHANGE)
+ ;
+ else
+ break;
+ }
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
+ {
+ if (rfu_LMAN_linkWatcher(0))
+ return;
}
+ rfu_LMAN_PARENT_checkRecvChildName();
+ rfu_LMAN_CHILD_checkSendChildName();
+ rfu_LMAN_CHILD_linkRecoveryProcess();
+ rfu_LMAN_checkNICommunicateStatus();
}
-static void sub_80FDC28(u32 a0)
+static void rfu_LMAN_settingPCSWITCH(u32 rand)
{
- if (gUnknown_3005E10.unk_07 == 5)
+ if (lman.pcswitch_flag == 5)
{
- gUnknown_3005E10.unk_06 = 1;
- gUnknown_3005E10.unk_04 = 5;
- gUnknown_3005E10.unk_1a = gUnknown_3005E10.unk_1c;
- if (gUnknown_3005E10.unk_1a)
+ lman.parent_child = MODE_PARENT;
+ lman.state = LMAN_STATE_START_SEARCH_CHILD;
+ lman.connect_period = lman.pcswitch_period_bak;
+ if (lman.connect_period)
{
- gUnknown_3005E10.unk_07 = 6;
+ lman.pcswitch_flag = 6;
}
else
{
- gUnknown_3005E10.unk_07 = 1;
+ lman.pcswitch_flag = 1;
}
}
- if (gUnknown_3005E10.unk_07 == 1)
+ if (lman.pcswitch_flag == 1)
{
- gUnknown_3005E10.unk_06 = 1;
- gUnknown_3005E10.unk_04 = 5;
- gUnknown_3005E10.unk_1a = a0 % 140;
- gUnknown_3005E10.unk_1c = 140 - gUnknown_3005E10.unk_1a;
- if (gUnknown_3005E10.unk_1a)
+ lman.parent_child = MODE_PARENT;
+ lman.state = LMAN_STATE_START_SEARCH_CHILD;
+ lman.connect_period = rand % 140;
+ lman.pcswitch_period_bak = 140 - lman.connect_period;
+ if (lman.connect_period)
{
- gUnknown_3005E10.unk_07 = 2;
+ lman.pcswitch_flag = 2;
}
else
{
- gUnknown_3005E10.unk_07 = 3;
+ lman.pcswitch_flag = 3;
}
}
- if (gUnknown_3005E10.unk_07 == 3)
+ if (lman.pcswitch_flag == 3)
{
- gUnknown_3005E10.unk_06 = 0;
- gUnknown_3005E10.unk_1a = 40;
- gUnknown_3005E10.unk_07 = 4;
- gUnknown_3005E10.unk_04 = 9;
+ lman.parent_child = MODE_CHILD;
+ lman.connect_period = 40;
+ lman.pcswitch_flag = 4;
+ lman.state = LMAN_STATE_START_SEARCH_PARENT;
}
}
-static void sub_80FDC98(u16 reqCommandId, u16 reqResult)
+static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult)
{
- u8 sp0;
- register u8 *stwiRecvBuffer asm("r0");
- u8 *tmp;
+ u8 status;
+ u8 *stwiRecvBuffer;
u8 i;
- if (gUnknown_3005E10.unk_0e != 0)
+ if (lman.active != 0)
{
- gUnknown_3005E10.unk_0e = 0;
+ lman.active = 0;
switch (reqCommandId)
{
case ID_RESET_REQ:
if (reqResult == 0)
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05;
- gUnknown_3005E10.unk_05 = 4;
+ lman.state = lman.next_state;
+ lman.next_state = LMAN_STATE_CONFIG_GAME_DATA;
}
break;
case ID_SYSTEM_CONFIG_REQ:
if (reqResult == 0)
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05;
- gUnknown_3005E10.unk_05 = 0;
+ lman.state = lman.next_state;
+ lman.next_state = LMAN_STATE_READY;
}
break;
case ID_GAME_CONFIG_REQ:
if (reqResult == 0)
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- sub_80FE7F0(0x00, 0x00);
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_LMAN_occureCallback(LMAN_MSG_INITIALIZE_COMPLETED, 0);
}
break;
case ID_SC_START_REQ:
if (reqResult == 0)
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 6;
+ lman.state = lman.next_state = LMAN_STATE_POLL_SEARCH_CHILD;
}
break;
case ID_SC_POLL_REQ:
- if (gUnknown_3005E10.unk_1a && --gUnknown_3005E10.unk_1a == 0)
+ if (lman.connect_period && --lman.connect_period == 0)
{
- gUnknown_3005E10.unk_04 = 7;
- gUnknown_3005E10.unk_05 = 8;
+ lman.state = LMAN_STATE_END_SEARCH_CHILD;
+ lman.next_state = LMAN_STATE_WAIT_RECV_CHILD_NAME;
}
break;
case ID_SC_END_REQ:
if (reqResult == 0)
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05;
- gUnknown_3005E10.unk_05 = 0;
- if (gUnknown_3005E10.unk_07 == 0)
+ lman.state = lman.next_state;
+ lman.next_state = LMAN_STATE_READY;
+ if (lman.pcswitch_flag == 0)
{
- sub_80FE7F0(0x13, 0x00);
+ rfu_LMAN_occureCallback(LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED, 0);
}
}
break;
case ID_SP_START_REQ:
if (reqResult == 0)
{
- if (gUnknown_3005E10.unk_0b == 1 && gUnknown_3005E10.unk_1a > 1)
+ if (lman.fastSearchParent_flag == 1 && lman.connect_period > 1)
{
- gUnknown_3005E10.unk_1a--;
+ lman.connect_period--;
}
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 10;
+ lman.state = lman.next_state = LMAN_STATE_POLL_SEARCH_PARENT;
}
break;
case ID_SP_POLL_REQ:
if (reqResult == 0)
{
- sp0 = sub_80FE778();
- gUnknown_3005E10.unk_14 = sp0;
- if (sp0)
+ status = rfu_LMAN_CHILD_checkEnableParentCandidate();
+ lman.param[0] = status;
+ if (status)
{
- sub_80FE7F0(0x20, 0x01);
+ rfu_LMAN_occureCallback(LMAN_MSG_PARENT_FOUND, 1);
}
- if (gUnknown_3005E10.unk_0b && gUnknown_3005E10.unk_1a != 1 && gRfuLinkStatus->findParentCount == RFU_CHILD_MAX)
+ if (lman.fastSearchParent_flag && lman.connect_period != 1 && gRfuLinkStatus->findParentCount == RFU_CHILD_MAX)
{
rfu_REQ_endSearchParent();
rfu_waitREQComplete();
- gUnknown_3005E10.unk_04 = 9;
- gUnknown_3005E10.unk_0b = 1;
+ lman.state = LMAN_STATE_START_SEARCH_PARENT;
+ lman.fastSearchParent_flag = 1;
}
}
- if (gUnknown_3005E10.unk_1a && --gUnknown_3005E10.unk_1a == 0)
+ if (lman.connect_period && --lman.connect_period == 0)
{
- gUnknown_3005E10.unk_04 = 11;
- gUnknown_3005E10.unk_05 = 0;
+ lman.state = LMAN_STATE_END_SEARCH_PARENT;
+ lman.next_state = LMAN_STATE_READY;
}
break;
case ID_SP_END_REQ:
if (reqResult == 0)
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05;
- if (gUnknown_3005E10.unk_07 == 0)
+ lman.state = lman.next_state;
+ if (lman.pcswitch_flag == 0)
{
- if (gUnknown_3005E10.unk_04 == 0)
+ if (lman.state == LMAN_STATE_READY)
{
- sub_80FE7F0(0x21, 0x00);
+ rfu_LMAN_occureCallback(LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED, 0);
}
}
- else if (gUnknown_3005E10.unk_07 != 7)
+ else if (lman.pcswitch_flag != 7)
{
- gUnknown_3005E10.unk_04 = 5;
- gUnknown_3005E10.unk_07 = 5;
+ lman.state = LMAN_STATE_START_SEARCH_CHILD;
+ lman.pcswitch_flag = 5;
}
}
break;
case ID_CP_START_REQ:
if (reqResult == 0)
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 13;
+ lman.state = lman.next_state = LMAN_STATE_POLL_CONNECT_PARENT;
}
break;
case ID_CP_POLL_REQ:
- if (reqResult == 0 && !rfu_getConnectParentStatus(&sp0, &gUnknown_3005E10.unk_10) && !sp0)
+ if (reqResult == 0 && !rfu_getConnectParentStatus(&status, &lman.child_slot) && !status)
{
- gUnknown_3005E10.unk_04 = 14;
+ lman.state = LMAN_STATE_END_CONNECT_PARENT;
}
- if (gUnknown_3005E10.unk_1a && --gUnknown_3005E10.unk_1a == 0)
+ if (lman.connect_period && --lman.connect_period == 0)
{
- gUnknown_3005E10.unk_04 = 14;
+ lman.state = LMAN_STATE_END_CONNECT_PARENT;
}
break;
case ID_CP_END_REQ:
- if (reqResult == 0 && !rfu_getConnectParentStatus(&sp0, &gUnknown_3005E10.unk_10))
+ if (reqResult == 0 && !rfu_getConnectParentStatus(&status, &lman.child_slot))
{
- if (!sp0)
+ if (!status)
{
- gUnknown_3005E10.unk_04 = 19;
- gUnknown_3005E10.unk_05 = 15;
- gUnknown_3005E10.unk_1e = 0x22;
- gUnknown_3005E10.unk_14 = gUnknown_3005E10.unk_10;
+ lman.state = LMAN_STATE_MS_CHANGE;
+ lman.next_state = LMAN_STATE_SEND_CHILD_NAME;
+ lman.work = 0x22;
+ lman.param[0] = lman.child_slot;
}
else
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- gUnknown_3005E10.unk_1e = 0x23;
- gUnknown_3005E10.unk_14 = sp0;
- if (gUnknown_3005E10.unk_07)
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ lman.work = 0x23;
+ lman.param[0] = status;
+ if (lman.pcswitch_flag)
{
- gUnknown_3005E10.unk_07 = 3;
- gUnknown_3005E10.unk_04 = 9;
+ lman.pcswitch_flag = 3;
+ lman.state = LMAN_STATE_START_SEARCH_PARENT;
}
}
- sub_80FE7F0(gUnknown_3005E10.unk_1e, 0x01);
- gUnknown_3005E10.unk_1e = 0;
+ rfu_LMAN_occureCallback(lman.work, 0x01);
+ lman.work = 0;
}
break;
case ID_CPR_START_REQ:
if (reqResult == 0)
{
- gUnknown_3005E10.unk_14 = gRfuLinkStatus->linkLossSlotFlag;
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 17;
- for (gUnknown_3005E10.unk_10 = 0; gUnknown_3005E10.unk_10 < RFU_CHILD_MAX; gUnknown_3005E10.unk_10++)
+ lman.param[0] = gRfuLinkStatus->linkLossSlotFlag;
+ lman.state = lman.next_state = LMAN_STATE_POLL_LINK_RECOVERY;
+ for (lman.child_slot = 0; lman.child_slot < RFU_CHILD_MAX; lman.child_slot++)
{
- if ((gRfuLinkStatus->linkLossSlotFlag >> gUnknown_3005E10.unk_10) & 1)
+ if ((gRfuLinkStatus->linkLossSlotFlag >> lman.child_slot) & 1)
{
break;
}
@@ -743,64 +744,63 @@ static void sub_80FDC98(u16 reqCommandId, u16 reqResult)
}
break;
case ID_CPR_POLL_REQ:
- if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&sp0) && sp0 < 2)
+ if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&status) && status < 2)
{
- gUnknown_3005E10.unk_04 = 18;
+ lman.state = LMAN_STATE_END_LINK_RECOVERY;
}
- if (gUnknown_3005E10.unk_34[gUnknown_3005E10.unk_10] && --gUnknown_3005E10.unk_34[gUnknown_3005E10.unk_10] == 0)
+ if (lman.linkRecoveryTimer.count[lman.child_slot] && --lman.linkRecoveryTimer.count[lman.child_slot] == 0)
{
- gUnknown_3005E10.unk_04 = 18;
+ lman.state = LMAN_STATE_END_LINK_RECOVERY;
}
break;
case ID_CPR_END_REQ:
- if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&sp0))
+ if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&status))
{
- if (!sp0)
+ if (!status)
{
- gUnknown_3005E10.unk_04 = 19;
- gUnknown_3005E10.unk_05 = 22;
- gUnknown_3005E10.unk_1e = 0x32;
+ lman.state = LMAN_STATE_MS_CHANGE;
+ lman.next_state = LMAN_STATE_BACK_STATE;
+ lman.work = 0x32;
}
else
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- sub_80FE818(gRfuLinkStatus->linkLossSlotFlag);
- gUnknown_3005E10.unk_1e = 0x33;
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_LMAN_disconnect(gRfuLinkStatus->linkLossSlotFlag);
+ lman.work = 0x33;
}
- gUnknown_3005E10.unk_34[gUnknown_3005E10.unk_10] = 0;
- gUnknown_3005E10.unk_30 = 0;
- gUnknown_3005E10.unk_0a = 0;
- sub_80FE7F0(gUnknown_3005E10.unk_1e, 0x01);
- gUnknown_3005E10.unk_1e = 0;
+ lman.linkRecoveryTimer.count[lman.child_slot] = 0;
+ lman.linkRecoveryTimer.active = 0;
+ lman.linkRecovery_start_flag = 0;
+ rfu_LMAN_occureCallback(lman.work, 0x01);
+ lman.work = 0;
}
break;
case ID_MS_CHANGE_REQ:
if (reqResult == 0)
{
- if (gUnknown_3005E10.unk_05 == 22)
+ if (lman.next_state == LMAN_STATE_BACK_STATE)
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_11;
- gUnknown_3005E10.unk_05 = gUnknown_3005E10.unk_12;
- gUnknown_3005E10.unk_02 = 1;
- sub_80FE7F0(0x41, 0x00);
+ lman.state = lman.state_bak[0];
+ lman.next_state = lman.state_bak[1];
+ lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_ON;
+ rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_SLAVE, 0);
}
- else if (gUnknown_3005E10.unk_05 == 15)
+ else if (lman.next_state == LMAN_STATE_SEND_CHILD_NAME)
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05;
- gUnknown_3005E10.unk_02 = 1;
- sub_80FE7F0(0x41, 0x00);
- gUnknown_3005E10.unk_24 |= 1 << gUnknown_3005E10.unk_10;
- gUnknown_3005E10.unk_28[gUnknown_3005E10.unk_10] = gUnknown_3005E10.unk_26;
- rfu_clearSlot(TYPE_NI_SEND, gUnknown_3005E10.unk_10);
- tmp = &sp0;
- *tmp = rfu_NI_CHILD_setSendGameName(gUnknown_3005E10.unk_10, 0x0e);
- if (*tmp)
+ lman.state = lman.next_state;
+ lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_ON;
+ rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_SLAVE, 0);
+ lman.nameAcceptTimer.active |= 1 << lman.child_slot;
+ lman.nameAcceptTimer.count[lman.child_slot] = lman.nameAcceptTimer.count_max;
+ rfu_clearSlot(TYPE_NI_SEND, lman.child_slot);
+ status = rfu_NI_CHILD_setSendGameName(lman.child_slot, 0x0e);
+ if (status)
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- sub_80FEAF4();
- sub_80FE818(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
- gUnknown_3005E10.unk_14 = sp0;
- sub_80FE7F0(0x25, 0x01);
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_LMAN_managerChangeAgbClockMaster();
+ rfu_LMAN_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
+ lman.param[0] = status;
+ rfu_LMAN_occureCallback(LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED, 1);
}
}
}
@@ -808,24 +808,24 @@ static void sub_80FDC98(u16 reqCommandId, u16 reqResult)
case ID_STOP_MODE_REQ:
if (reqResult == 0)
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- sub_80FE7F0(0x42, 0x00);
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_LMAN_occureCallback(LMAN_MSG_RFU_POWER_DOWN, 0);
}
break;
}
- gUnknown_3005E10.unk_0e = 1;
+ lman.active = 1;
}
- else if (reqResult == 3 && gUnknown_3005E10.unk_0f && (reqCommandId == ID_DATA_TX_REQ || reqCommandId == ID_DATA_RX_REQ || reqCommandId == ID_MS_CHANGE_REQ))
+ else if (reqResult == 3 && lman.msc_exe_flag && (reqCommandId == ID_DATA_TX_REQ || reqCommandId == ID_DATA_RX_REQ || reqCommandId == ID_MS_CHANGE_REQ))
{
rfu_REQ_RFUStatus();
rfu_waitREQComplete();
- rfu_getRFUStatus(&sp0);
- if (sp0 == 0 && gRfuLinkStatus->parentChild == MODE_CHILD)
+ rfu_getRFUStatus(&status);
+ if (status == 0 && gRfuLinkStatus->parentChild == MODE_CHILD)
{
- stwiRecvBuffer = rfu_getSTWIRecvBuffer()->rxPacketAlloc.rfuPacket8.data;
- stwiRecvBuffer[4] = gRfuLinkStatus->connSlotFlag;
- stwiRecvBuffer[5] = 1;
- sub_80FD850(0x29);
+ stwiRecvBuffer = rfu_getSTWIRecvBuffer() + 4;
+ *stwiRecvBuffer++ = gRfuLinkStatus->connSlotFlag;
+ *stwiRecvBuffer = REASON_LINK_LOSS;
+ rfu_LMAN_linkWatcher(ID_DISCONNECTED_AND_CHANGE_REQ);
reqResult = 0;
}
}
@@ -834,339 +834,338 @@ static void sub_80FDC98(u16 reqCommandId, u16 reqResult)
case ID_DISCONNECT_REQ:
if (reqResult == 0)
{
- stwiRecvBuffer = rfu_getSTWIRecvBuffer()->rxPacketAlloc.rfuPacket8.data;
- gUnknown_3005E10.unk_14 = stwiRecvBuffer[8];
- sub_80FE83C(gUnknown_3005E10.unk_14);
- if (gUnknown_3005E10.unk_30)
+ lman.param[0] = *(rfu_getSTWIRecvBuffer() + 8);
+ rfu_LMAN_reflectCommunicationStatus(lman.param[0]);
+ if (lman.linkRecoveryTimer.active)
{
- gUnknown_3005E10.unk_30 &= ~gUnknown_3005E10.unk_14;
+ lman.linkRecoveryTimer.active &= ~lman.param[0];
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((gUnknown_3005E10.unk_14 >> i) & 1)
+ if ((lman.param[0] >> i) & 1)
{
- gUnknown_3005E10.unk_34[i] = 0;
+ lman.linkRecoveryTimer.count[i] = 0;
}
}
- if (gUnknown_3005E10.unk_06 == 0)
+ if (lman.parent_child == 0)
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
+ lman.state = lman.next_state = LMAN_STATE_READY;
}
}
- sp0 = gUnknown_3005E10.unk_00 & gUnknown_3005E10.unk_14;
+ status = lman.acceptSlot_flag & lman.param[0];
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((sp0 >> i) & 1 && gUnknown_3005E10.unk_01)
+ if ((status >> i) & 1 && lman.acceptCount)
{
- gUnknown_3005E10.unk_01--;
+ lman.acceptCount--;
}
}
- gUnknown_3005E10.unk_00 &= ~gUnknown_3005E10.unk_14;
- if (gUnknown_3005E10.unk_07)
+ lman.acceptSlot_flag &= ~lman.param[0];
+ if (lman.pcswitch_flag)
{
if (gRfuLinkStatus->parentChild == MODE_NEUTRAL)
{
- if (gUnknown_3005E10.unk_07 == 8)
+ if (lman.pcswitch_flag == 8)
{
- gUnknown_3005E10.unk_1a = gUnknown_3005E10.unk_1c;
- gUnknown_3005E10.unk_07 = 6;
- gUnknown_3005E10.unk_04 = 6;
+ lman.connect_period = lman.pcswitch_period_bak;
+ lman.pcswitch_flag = 6;
+ lman.state = LMAN_STATE_POLL_SEARCH_CHILD;
}
- else if (gUnknown_3005E10.unk_04 != 6 && gUnknown_3005E10.unk_04 != 7)
+ else if (lman.state != LMAN_STATE_POLL_SEARCH_CHILD && lman.state != LMAN_STATE_END_SEARCH_CHILD)
{
- gUnknown_3005E10.unk_07 = 1;
- gUnknown_3005E10.unk_04 = 5;
+ lman.pcswitch_flag = 1;
+ lman.state = LMAN_STATE_START_SEARCH_CHILD;
}
}
}
if (gRfuLinkStatus->parentChild == MODE_NEUTRAL)
{
- if (gUnknown_3005E10.unk_04 == 0)
+ if (lman.state == LMAN_STATE_READY)
{
- gUnknown_3005E10.unk_06 = -1;
+ lman.parent_child = MODE_NEUTRAL;
}
}
- if (gUnknown_3005E10.unk_0e == 0)
+ if (lman.active == 0)
{
- sub_80FE7F0(0x40, 0x01);
+ rfu_LMAN_occureCallback(LMAN_MSG_LINK_DISCONNECTED_BY_USER, 1);
}
}
break;
case ID_DATA_RX_REQ:
- sub_80FE6F0();
+ rfu_LMAN_CHILD_checkSendChildName2();
if (gRfuLinkStatus->parentChild != MODE_NEUTRAL)
{
- sub_80FE7F0(0x50, 0x00);
+ rfu_LMAN_occureCallback(LMAN_MSG_RECV_DATA_REQ_COMPLETED, 0);
}
break;
case ID_RESET_REQ:
case ID_STOP_MODE_REQ:
if (reqResult == 0)
{
- gUnknown_3005E10.unk_0d = 0;
- gUnknown_3005E10.unk_01 = 0;
- gUnknown_3005E10.unk_00 = 0;;
- gUnknown_3005E10.unk_06 = -1;
- sub_80FEAF4();
- if (reqCommandId == 61)
+ lman.reserveDisconnectSlot_flag = 0;
+ lman.acceptCount = 0;
+ lman.acceptSlot_flag = 0;;
+ lman.parent_child = MODE_NEUTRAL;
+ rfu_LMAN_managerChangeAgbClockMaster();
+ if (reqCommandId == ID_STOP_MODE_REQ)
{
- sub_80FD484();
+ rfu_LMAN_endManager();
}
}
break;
}
if (reqResult != 0)
{
- if (reqCommandId == ID_SP_START_REQ && reqResult != 0 && gUnknown_3005E10.unk_07 == 4)
+ if (reqCommandId == ID_SP_START_REQ && reqResult != 0 && lman.pcswitch_flag == 4)
{
gRfuLinkStatus->parentChild = MODE_PARENT;
gRfuLinkStatus->connSlotFlag = 0xF;
- sub_80FE818(15);
+ rfu_LMAN_disconnect(15);
rfu_waitREQComplete();
return;
}
else
{
- gUnknown_3005E10.unk_14 = reqCommandId;
- gUnknown_3005E10.unk_16 = reqResult;
- if (gUnknown_3005E10.unk_0e)
+ lman.param[0] = reqCommandId;
+ lman.param[1] = reqResult;
+ if (lman.active)
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
+ lman.state = lman.next_state = LMAN_STATE_READY;
}
- sub_80FE7F0(0xf0, 0x02);
- sub_80FEAF4();
+ rfu_LMAN_occureCallback(LMAN_MSG_REQ_API_ERROR, 2);
+ rfu_LMAN_managerChangeAgbClockMaster();
}
}
if (reqCommandId == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ)
{
- sub_80FE7F0(0xf2, 0x00);
- sub_80FEAF4();
+ rfu_LMAN_occureCallback(LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA, 0);
+ rfu_LMAN_managerChangeAgbClockMaster();
}
}
-static void sub_80FE394(u16 reqCommandId)
+static void rfu_LMAN_MSC_callback(u16 reqCommandId)
{
- u8 r7;
- u8 ackFlag;
+ u8 active_bak;
+ u8 thisAck_flag;
- r7 = gUnknown_3005E10.unk_0e;
- gUnknown_3005E10.unk_0e = 0;
- gUnknown_3005E10.unk_0f = 1;
+ active_bak = lman.active;
+ lman.active = 0;
+ lman.msc_exe_flag = 1;
if (gRfuLinkStatus->parentChild == MODE_CHILD)
{
- sub_80FD850(reqCommandId);
- if (gUnknown_3005E10.unk_02 != 1)
+ rfu_LMAN_linkWatcher(reqCommandId);
+ if (lman.childClockSlave_flag != RFU_CHILD_CLOCK_SLAVE_ON)
{
- sub_80FEAF4();
- gUnknown_3005E10.unk_0f = 0;
- gUnknown_3005E10.unk_0e = r7;
+ rfu_LMAN_managerChangeAgbClockMaster();
+ lman.msc_exe_flag = 0;
+ lman.active = active_bak;
return;
}
}
else
{
- if (!rfu_UNI_PARENT_getDRAC_ACK(&ackFlag))
+ if (!rfu_UNI_PARENT_getDRAC_ACK(&thisAck_flag))
{
- gUnknown_3005E10.unk_03 |= ackFlag;
+ lman.parentAck_flag |= thisAck_flag;
}
}
- if (gUnknown_3005E10.unk_44 != NULL)
+ if (lman.MSC_callback != NULL)
{
- gUnknown_3005E10.unk_44(reqCommandId);
+ lman.MSC_callback(reqCommandId);
rfu_waitREQComplete();
- if (gUnknown_3005E10.unk_02 == 2)
+ if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_OFF_REQ)
{
- sub_80FEAF4();
+ rfu_LMAN_managerChangeAgbClockMaster();
}
}
- gUnknown_3005E10.unk_0f = 0;
- gUnknown_3005E10.unk_0e = r7;
+ lman.msc_exe_flag = 0;
+ lman.active = active_bak;
}
-static void sub_80FE418(void)
+static void rfu_LMAN_PARENT_checkRecvChildName(void)
{
- u8 flags;
- u8 sp0;
+ u8 newSlot;
+ u8 newAcceptSlot;
u8 i;
- u8 r5;
- u8 r4;
+ u8 flags;
+ u8 tgtSlot;
const u16 *ptr;
- if (gUnknown_3005E10.unk_04 == 5 || gUnknown_3005E10.unk_04 == 6 || gUnknown_3005E10.unk_04 == 7 || gUnknown_3005E10.unk_04 == 8)
+ if (lman.state == LMAN_STATE_START_SEARCH_CHILD || lman.state == LMAN_STATE_POLL_SEARCH_CHILD || lman.state == LMAN_STATE_END_SEARCH_CHILD || lman.state == LMAN_STATE_WAIT_RECV_CHILD_NAME)
{
- flags = ((gRfuLinkStatus->connSlotFlag ^ gUnknown_3005E10.unk_0c) & gRfuLinkStatus->connSlotFlag) & ~gRfuLinkStatus->getNameFlag;
- gUnknown_3005E10.unk_0c = gRfuLinkStatus->connSlotFlag;
- if (flags)
+ newSlot = ((gRfuLinkStatus->connSlotFlag ^ lman.connectSlot_flag_old) & gRfuLinkStatus->connSlotFlag) & ~gRfuLinkStatus->getNameFlag;
+ lman.connectSlot_flag_old = gRfuLinkStatus->connSlotFlag;
+ if (newSlot)
{
- gUnknown_3005E10.unk_14 = flags;
- sub_80FE7F0(0x10, 0x01);
+ lman.param[0] = newSlot;
+ rfu_LMAN_occureCallback(LMAN_MSG_NEW_CHILD_CONNECT_DETECTED, 1);
}
- sp0 = 0x00;
+ newAcceptSlot = 0x00;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- r4 = 1 << i;
- r5 = 0x00;
- if (flags & r4)
+ tgtSlot = 1 << i;
+ flags = 0x00;
+ if (newSlot & tgtSlot)
{
- gUnknown_3005E10.unk_28[i] = gUnknown_3005E10.unk_26;
- gUnknown_3005E10.unk_24 |= r4;
+ lman.nameAcceptTimer.count[i] = lman.nameAcceptTimer.count_max;
+ lman.nameAcceptTimer.active |= tgtSlot;
}
- else if (gUnknown_3005E10.unk_24 & r4)
+ else if (lman.nameAcceptTimer.active & tgtSlot)
{
if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS)
{
if (gRfuSlotStatusNI[i]->recv.dataType == 1) // Game identification information
{
- r5 = 0x02;
- for (ptr = gUnknown_3005E10.unk_20; *ptr != 0xFFFF; ptr++)
+ flags = 0x02;
+ for (ptr = lman.acceptable_serialNo_list; *ptr != 0xFFFF; ptr++)
{
if (gRfuLinkStatus->partner[i].serialNo == *ptr)
{
- gUnknown_3005E10.unk_00 |= r4;
- gUnknown_3005E10.unk_01++;
- sp0 |= r4;
- r5 |= 0x01;
+ lman.acceptSlot_flag |= tgtSlot;
+ lman.acceptCount++;
+ newAcceptSlot |= tgtSlot;
+ flags |= 0x01;
break;
}
}
- if (!(r5 & 0x01))
+ if (!(flags & 0x01))
{
- r5 |= 0x04;
+ flags |= 0x04;
}
}
}
- else if (--gUnknown_3005E10.unk_28[i] == 0)
+ else if (--lman.nameAcceptTimer.count[i] == 0)
{
- r5 = 0x06;
+ flags = 0x06;
}
- if (r5 & 0x02)
+ if (flags & 0x02)
{
- gUnknown_3005E10.unk_24 &= ~r4;
- gUnknown_3005E10.unk_28[i] = 0;
+ lman.nameAcceptTimer.active &= ~tgtSlot;
+ lman.nameAcceptTimer.count[i] = 0;
rfu_clearSlot(TYPE_NI_RECV, i);
}
- if (r5 & 0x04)
+ if (flags & 0x04)
{
- gUnknown_3005E10.unk_0d |= r4;
+ lman.reserveDisconnectSlot_flag |= tgtSlot;
}
}
}
- if (sp0)
+ if (newAcceptSlot)
{
- gUnknown_3005E10.unk_14 = sp0;
- sub_80FE7F0(0x11, 0x01);
+ lman.param[0] = newAcceptSlot;
+ rfu_LMAN_occureCallback(LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED, 1);
}
- if (gUnknown_3005E10.unk_0d)
+ if (lman.reserveDisconnectSlot_flag)
{
- r5 = 0x01;
- if (gRfuLinkStatus->sendSlotUNIFlag && ((gUnknown_3005E10.unk_03 & gUnknown_3005E10.unk_00) != gUnknown_3005E10.unk_00))
+ flags = 0x01;
+ if (gRfuLinkStatus->sendSlotUNIFlag && ((lman.parentAck_flag & lman.acceptSlot_flag) != lman.acceptSlot_flag))
{
- r5 = 0x00;
+ flags = 0x00;
}
- if (r5)
+ if (flags)
{
- sub_80FE818(gUnknown_3005E10.unk_0d);
- gUnknown_3005E10.unk_14 = gUnknown_3005E10.unk_0d;
- gUnknown_3005E10.unk_0d = 0;
- sub_80FE7F0(0x12, 0x01);
+ rfu_LMAN_disconnect(lman.reserveDisconnectSlot_flag);
+ lman.param[0] = lman.reserveDisconnectSlot_flag;
+ lman.reserveDisconnectSlot_flag = 0;
+ rfu_LMAN_occureCallback(LMAN_MSG_NEW_CHILD_CONNECT_REJECTED, 1);
}
}
- if (gUnknown_3005E10.unk_24 == 0 && gUnknown_3005E10.unk_04 == 8)
+ if (lman.nameAcceptTimer.active == 0 && lman.state == LMAN_STATE_WAIT_RECV_CHILD_NAME)
{
- if (gUnknown_3005E10.unk_07 == 0)
+ if (lman.pcswitch_flag == 0)
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- sub_80FE7F0(0x14, 0x00);
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_LMAN_occureCallback(LMAN_MSG_END_WAIT_CHILD_NAME, 0);
}
else
{
- if (gUnknown_3005E10.unk_07 == 2)
+ if (lman.pcswitch_flag == 2)
{
- gUnknown_3005E10.unk_07 = 3;
- gUnknown_3005E10.unk_04 = 9;
+ lman.pcswitch_flag = 3;
+ lman.state = LMAN_STATE_START_SEARCH_PARENT;
}
else
{
- gUnknown_3005E10.unk_07 = 1;
- gUnknown_3005E10.unk_04 = 5;
+ lman.pcswitch_flag = 1;
+ lman.state = LMAN_STATE_START_SEARCH_CHILD;
}
- if (gUnknown_3005E10.unk_00)
+ if (lman.acceptSlot_flag)
{
- gUnknown_3005E10.unk_1a = 0;
- gUnknown_3005E10.unk_07 = 8;
- gUnknown_3005E10.unk_04 = 5;
+ lman.connect_period = 0;
+ lman.pcswitch_flag = 8;
+ lman.state = LMAN_STATE_START_SEARCH_CHILD;
}
}
}
}
}
-static void sub_80FE63C(void)
+static void rfu_LMAN_CHILD_checkSendChildName(void)
{
u16 imeBak = REG_IME;
REG_IME = 0;
- if (gUnknown_3005E10.unk_04 == 15)
+ if (lman.state == LMAN_STATE_SEND_CHILD_NAME)
{
- if (--gUnknown_3005E10.unk_28[gUnknown_3005E10.unk_10] == 0 || gRfuSlotStatusNI[gUnknown_3005E10.unk_10]->send.state == SLOT_STATE_SEND_FAILED)
+ if (--lman.nameAcceptTimer.count[lman.child_slot] == 0 || gRfuSlotStatusNI[lman.child_slot]->send.state == SLOT_STATE_SEND_FAILED)
{
- sub_80FEB14();
- gUnknown_3005E10.unk_04 = 24;
- rfu_clearSlot(TYPE_NI_SEND, gUnknown_3005E10.unk_10);
- gUnknown_3005E10.unk_24 &= ~(1 << gUnknown_3005E10.unk_10);
- gUnknown_3005E10.unk_28[gUnknown_3005E10.unk_10] = 0;
+ rfu_LMAN_requestChangeAgbClockMaster();
+ lman.state = LMAN_STATE_WAIT_CHANGE_CLOCK_MASTER;
+ rfu_clearSlot(TYPE_NI_SEND, lman.child_slot);
+ lman.nameAcceptTimer.active &= ~(1 << lman.child_slot);
+ lman.nameAcceptTimer.count[lman.child_slot] = 0;
}
}
REG_IME = imeBak;
- if (gUnknown_3005E10.unk_04 == 24)
+ if (lman.state == LMAN_STATE_WAIT_CHANGE_CLOCK_MASTER)
{
- if (gUnknown_3005E10.unk_02 == 1)
+ if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_ON)
{
- sub_80FEB14();
+ rfu_LMAN_requestChangeAgbClockMaster();
}
- if (gUnknown_3005E10.unk_02 == 0)
+ if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_OFF)
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- sub_80FE818(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
- gUnknown_3005E10.unk_14 = 0;
- sub_80FE7F0(0x25, 0x01);
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_LMAN_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
+ lman.param[0] = 0;
+ rfu_LMAN_occureCallback(LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED, 1);
}
}
}
-static void sub_80FE6F0(void)
+static void rfu_LMAN_CHILD_checkSendChildName2(void)
{
- if (gUnknown_3005E10.unk_04 == 15 && gRfuSlotStatusNI[gUnknown_3005E10.unk_10]->send.state == SLOT_STATE_SEND_SUCCESS)
+ if (lman.state == LMAN_STATE_SEND_CHILD_NAME && gRfuSlotStatusNI[lman.child_slot]->send.state == SLOT_STATE_SEND_SUCCESS)
{
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- rfu_clearSlot(TYPE_NI_SEND, gUnknown_3005E10.unk_10);
- gUnknown_3005E10.unk_24 &= ~(1 << gUnknown_3005E10.unk_10);
- gUnknown_3005E10.unk_28[gUnknown_3005E10.unk_10] = 0;
- sub_80FE7F0(0x24, 0x00);
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_clearSlot(TYPE_NI_SEND, lman.child_slot);
+ lman.nameAcceptTimer.active &= ~(1 << lman.child_slot);
+ lman.nameAcceptTimer.count[lman.child_slot] = 0;
+ rfu_LMAN_occureCallback(LMAN_MSG_CHILD_NAME_SEND_COMPLETED, 0);
}
}
-static void sub_80FE74C(void)
+static void rfu_LMAN_CHILD_linkRecoveryProcess(void)
{
- if (gUnknown_3005E10.unk_06 == 0 && gUnknown_3005E10.unk_0a == 1)
+ if (lman.parent_child == 0 && lman.linkRecovery_start_flag == 1)
{
- gUnknown_3005E10.unk_11 = gUnknown_3005E10.unk_04;
- gUnknown_3005E10.unk_12 = gUnknown_3005E10.unk_05;
- gUnknown_3005E10.unk_04 = 16;
- gUnknown_3005E10.unk_05 = 17;
- gUnknown_3005E10.unk_0a = 2;
+ lman.state_bak[0] = lman.state;
+ lman.state_bak[1] = lman.next_state;
+ lman.state = LMAN_STATE_START_LINK_RECOVERY;
+ lman.next_state = LMAN_STATE_POLL_LINK_RECOVERY;
+ lman.linkRecovery_start_flag = 2;
}
}
-static u8 sub_80FE778(void)
+static u8 rfu_LMAN_CHILD_checkEnableParentCandidate(void)
{
u8 i;
- const u16 *ptr;
+ u16 *serialNo;
u8 flags = 0x00;
for (i = 0; i < gRfuLinkStatus->findParentCount; i++)
{
- for (ptr = gUnknown_3005E10.unk_20; *ptr != 0xFFFF; ptr++)
+ for (serialNo = lman.acceptable_serialNo_list; *serialNo != 0xFFFF; serialNo++)
{
- if (gRfuLinkStatus->partner[i].serialNo == *ptr)
+ if (gRfuLinkStatus->partner[i].serialNo == *serialNo)
{
flags |= (1 << i);
}
@@ -1175,25 +1174,25 @@ static u8 sub_80FE778(void)
return flags;
}
-static void sub_80FE7F0(u8 a0, u8 a1)
+static void rfu_LMAN_occureCallback(u8 msg, u8 param_count)
{
- if (gUnknown_3005E10.unk_40 != NULL)
+ if (lman.LMAN_callback != NULL)
{
- gUnknown_3005E10.unk_40(a0, a1);
+ lman.LMAN_callback(msg, param_count);
}
- gUnknown_3005E10.unk_14 = gUnknown_3005E10.unk_16 = 0;
+ lman.param[0] = lman.param[1] = 0;
}
-static void sub_80FE818(u8 a0)
+static void rfu_LMAN_disconnect(u8 bm_disconnectedSlot)
{
- u8 unk_0e_bak = gUnknown_3005E10.unk_0e;
- gUnknown_3005E10.unk_0e = 1;
- rfu_REQ_disconnect(a0);
+ u8 active_bak = lman.active;
+ lman.active = 1;
+ rfu_REQ_disconnect(bm_disconnectedSlot);
rfu_waitREQComplete();
- gUnknown_3005E10.unk_0e = unk_0e_bak;
+ lman.active = active_bak;
}
-static void sub_80FE83C(u8 a0)
+static void rfu_LMAN_reflectCommunicationStatus(u8 bm_disconnectedSlot)
{
u8 i;
@@ -1201,9 +1200,9 @@ static void sub_80FE83C(u8 a0)
{
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->send.bmSlot & a0)
+ if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->send.bmSlot & bm_disconnectedSlot)
{
- rfu_changeSendTarget(TYPE_NI, i, gRfuSlotStatusNI[i]->send.bmSlot & ~a0);
+ rfu_changeSendTarget(TYPE_NI, i, gRfuSlotStatusNI[i]->send.bmSlot & ~bm_disconnectedSlot);
}
}
}
@@ -1211,7 +1210,7 @@ static void sub_80FE83C(u8 a0)
{
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->recv.bmSlot & a0)
+ if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->recv.bmSlot & bm_disconnectedSlot)
{
rfu_NI_stopReceivingData(i);
}
@@ -1219,24 +1218,24 @@ static void sub_80FE83C(u8 a0)
}
if (gRfuLinkStatus->sendSlotUNIFlag)
{
- gRfuLinkStatus->sendSlotUNIFlag &= ~a0;
+ gRfuLinkStatus->sendSlotUNIFlag &= ~bm_disconnectedSlot;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (gRfuSlotStatusUNI[i]->send.state == SLOT_STATE_SEND_UNI && a0 & gRfuSlotStatusUNI[i]->send.bmSlot)
+ if (gRfuSlotStatusUNI[i]->send.state == SLOT_STATE_SEND_UNI && bm_disconnectedSlot & gRfuSlotStatusUNI[i]->send.bmSlot)
{
- gRfuSlotStatusUNI[i]->send.bmSlot &= ~a0;
+ gRfuSlotStatusUNI[i]->send.bmSlot &= ~bm_disconnectedSlot;
}
}
}
}
-static void sub_80FE918(void)
+static void rfu_LMAN_checkNICommunicateStatus(void)
{
u8 i;
u8 j;
u8 flags;
- if (gUnknown_3005E10.unk_18)
+ if (lman.NI_failCounter_limit)
{
if (gRfuLinkStatus->sendSlotNIFlag)
{
@@ -1247,7 +1246,7 @@ static void sub_80FE918(void)
flags = 0;
for (j = 0; j < RFU_CHILD_MAX; j++)
{
- if ((gRfuSlotStatusNI[i]->send.bmSlot >> j) & 1 && gRfuSlotStatusNI[j]->send.failCounter > gUnknown_3005E10.unk_18)
+ if ((gRfuSlotStatusNI[i]->send.bmSlot >> j) & 1 && gRfuSlotStatusNI[j]->send.failCounter > lman.NI_failCounter_limit)
{
flags |= (1 << j);
}
@@ -1263,7 +1262,7 @@ static void sub_80FE918(void)
{
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->recv.failCounter > gUnknown_3005E10.unk_18)
+ if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->recv.failCounter > lman.NI_failCounter_limit)
{
rfu_NI_stopReceivingData(i);
}
@@ -1272,109 +1271,109 @@ static void sub_80FE918(void)
}
}
-void sub_80FEA10(void (*func)(u16))
+void rfu_LMAN_setMSCCallback(void (*MSC_callback_p)(u16))
{
- gUnknown_3005E10.unk_44 = func;
- rfu_setMSCCallback(sub_80FE394);
+ lman.MSC_callback = MSC_callback_p;
+ rfu_setMSCCallback(rfu_LMAN_MSC_callback);
}
-static void sub_80FEA28(void (*func)(u8, u8))
+static void rfu_LMAN_setLMANCallback(void (*func)(u8, u8))
{
- gUnknown_3005E10.unk_40 = func;
+ lman.LMAN_callback = func;
}
-u8 sub_80FEA34(u8 a0, u16 a1)
+u8 rfu_LMAN_setLinkRecovery(u8 enable_flag, u16 recovery_period)
{
u16 imeBak;
- if (gUnknown_3005E10.unk_09 && a0 == 0 && gUnknown_3005E10.unk_30)
+ if (lman.linkRecovery_enable && enable_flag == 0 && lman.linkRecoveryTimer.active)
{
- return 5;
+ return LMAN_ERROR_NOW_LINK_RECOVERY;
}
imeBak = REG_IME;
REG_IME = 0;
- gUnknown_3005E10.unk_09 = a0;
- gUnknown_3005E10.unk_32 = a1;
+ lman.linkRecovery_enable = enable_flag;
+ lman.linkRecoveryTimer.count_max = recovery_period;
REG_IME = imeBak;
return 0;
}
-static u8 sub_80FEA78(u16 a0)
+static u8 rfu_LMAN_setNIFailCounterLimit(u16 NI_failCounter_limit)
{
if (gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag)
{
- gUnknown_3005E10.unk_14 = 6;
- sub_80FE7F0(0xf3, 0x01);
- return 6;
+ lman.param[0] = 6;
+ rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1);
+ return LMAN_ERROR_NOW_COMMUNICATION;
}
- gUnknown_3005E10.unk_18 = a0;
+ lman.NI_failCounter_limit = NI_failCounter_limit;
return 0;
}
-static u8 sub_80FEAB4(u8 a0)
+static u8 rfu_LMAN_setFastSearchParent(u8 enable_flag)
{
- if (gUnknown_3005E10.unk_04 == 9 || gUnknown_3005E10.unk_04 == 10 || gUnknown_3005E10.unk_04 == 11)
+ if (lman.state == LMAN_STATE_START_SEARCH_PARENT || lman.state == LMAN_STATE_POLL_SEARCH_PARENT || lman.state == LMAN_STATE_END_SEARCH_PARENT)
{
- gUnknown_3005E10.unk_14 = 7;
- sub_80FE7F0(0xf3, 0x01);
- return 7;
+ lman.param[0] = 7;
+ rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1);
+ return LMAN_ERROR_NOW_SEARCH_PARENT;
}
- if (a0)
+ if (enable_flag)
{
- gUnknown_3005E10.unk_0b = 1;
+ lman.fastSearchParent_flag = 1;
}
else
{
- gUnknown_3005E10.unk_0b = 0;
+ lman.fastSearchParent_flag = 0;
}
return 0;
}
-static void sub_80FEAF4(void)
+static void rfu_LMAN_managerChangeAgbClockMaster(void)
{
- if (gUnknown_3005E10.unk_02)
+ if (lman.childClockSlave_flag != RFU_CHILD_CLOCK_SLAVE_OFF)
{
- gUnknown_3005E10.unk_02 = 0;
- sub_80FE7F0(0x45, 0x00);
+ lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_OFF;
+ rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_MASTER, 0);
}
}
-void sub_80FEB14(void)
+void rfu_LMAN_requestChangeAgbClockMaster(void)
{
- if (gUnknown_3005E10.unk_02 == 0)
+ if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_OFF)
{
- sub_80FE7F0(0x45, 0x00);
+ rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_MASTER, 0);
}
- else if (gUnknown_3005E10.unk_02 == 1)
+ else if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_ON)
{
- gUnknown_3005E10.unk_02 = 2;
+ lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_OFF_REQ;
}
}
-void sub_80FEB3C(void)
+void rfu_LMAN_forceChangeSP(void)
{
- if (gUnknown_3005E10.unk_07)
+ if (lman.pcswitch_flag)
{
- switch (gUnknown_3005E10.unk_04)
+ switch (lman.state)
{
- case 5:
- gUnknown_3005E10.unk_07 = 3;
- gUnknown_3005E10.unk_04 = 9;
+ case LMAN_STATE_START_SEARCH_CHILD:
+ lman.pcswitch_flag = 3;
+ lman.state = LMAN_STATE_START_SEARCH_PARENT;
break;
- case 6:
- gUnknown_3005E10.unk_07 = 2;
- gUnknown_3005E10.unk_1a = 1;
+ case LMAN_STATE_POLL_SEARCH_CHILD:
+ lman.pcswitch_flag = 2;
+ lman.connect_period = 1;
break;
- case 7:
- case 8:
- gUnknown_3005E10.unk_07 = 2;
+ case LMAN_STATE_END_SEARCH_CHILD:
+ case LMAN_STATE_WAIT_RECV_CHILD_NAME:
+ lman.pcswitch_flag = 2;
break;
- case 9:
- case 10:
- gUnknown_3005E10.unk_1a = 40;
+ case LMAN_STATE_START_SEARCH_PARENT:
+ case LMAN_STATE_POLL_SEARCH_PARENT:
+ lman.connect_period = 40;
break;
- case 11:
- gUnknown_3005E10.unk_1a = 40;
- gUnknown_3005E10.unk_04 = 10;
+ case LMAN_STATE_END_SEARCH_PARENT:
+ lman.connect_period = 40;
+ lman.state = LMAN_STATE_POLL_SEARCH_PARENT;
break;
}
}
diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c
index a27948650..70dbab5e4 100644
--- a/src/link_rfu_2.c
+++ b/src/link_rfu_2.c
@@ -21,15 +21,15 @@ struct UnkRfuStruct_8010A14{
u8 fill_a0[0x5c];
};
-static EWRAM_DATA struct UnkLinkRfuStruct_02022B2C sRfuReqConfig = {};
+static EWRAM_DATA struct InitializeParametersTag sRfuReqConfig = {};
static EWRAM_DATA struct UnkLinkRfuStruct_02022B44 gUnknown_203AC08 = {};
-static struct RfuAPIBuffer gRfuAPIBuffer;
+static u32 gf_rfu_REQ_api[RFU_API_BUFF_SIZE_RAM / 4];
static u8 gUnknown_3001FF8[14];
static u16 gUnknown_3002008[7];
struct GFtgtGname gHostRFUtgtGnameBuffer;
-struct UnkRfuStruct_2 Rfu;
+GF_RFU_MANAGER Rfu;
u8 gHostRFUtgtUnameBuffer[PLAYER_NAME_LENGTH + 1];
static void sub_80F8AA4(void);
@@ -38,7 +38,7 @@ static void sub_80F8D20(u16 a0);
static void sub_80F8DA8(u16 a0);
static void sub_80F906C(void);
static void sub_80F9868(u8 unused);
-static void sub_80F9CB4(struct UnkRfuStruct_2_Sub_6c *data);
+static void ResetSendDataManager(struct UnkRfuStruct_2_Sub_6c *data);
static void sub_80F9D04(u16 command);
static void rfufunc_80F9F44(void);
static void sub_80F9FA8(void);
@@ -51,28 +51,28 @@ static void sub_80FA9D0(u16 a0);
static void sub_80FAA58(void * a0);
static void sub_80FAA94(u8 taskId);
static void sub_80FACF0(u8 taskId);
-static void sub_80FB0E8(u32 a0);
+static void GetLinkmanErrorParams(u32 msg);
static void sub_80FB564(s32 a0);
static void sub_80FBB74(void);
-static u8 sub_80FBC70(const u8 *a0, u16 a1);
-static void sub_80FBCF8(u32 a0);
+static u8 GetPartnerIndexByNameAndTrainerID(const u8 *trainerName, u16 trainerId);
+static void sub_80FBCF8(u32 bmDisconnectSlot);
static void sub_80FBE20(u32 a0, u32 a1);
static void sub_80FC028(u8 taskId);
static void sub_80FC208(void);
static void nullsub_89(u8 taskId);
-static const struct UnkLinkRfuStruct_02022B2C sRfuReqConfigTemplate = {
+static const struct InitializeParametersTag sRfuReqConfigTemplate = {
.maxMFrame = 4,
- .mcTimer = 32,
- .availSlotFlag = 0,
- .mbootFlag = 0,
+ .MC_TimerCount = 32,
+ .availSlot_flag = 0,
+ .mboot_flag = 0,
.serialNo = 0x0002,
- .gname = &gHostRFUtgtGnameBuffer,
- .uname = gHostRFUtgtUnameBuffer,
- .unk_10 = 0x01,
- .unk_11 = 0x00,
- .unk_12 = 0x0258,
- .unk_14 = 0x012c
+ .gameName = (void *)&gHostRFUtgtGnameBuffer,
+ .userName = gHostRFUtgtUnameBuffer,
+ .fastSearchParent_flag = TRUE,
+ .linkRecovery_enable = FALSE,
+ .linkRecovery_period = 600,
+ .NI_failCounter_limit = 300
};
static const u8 sAvailSlots[] = {
@@ -138,8 +138,10 @@ static const struct {
{ gBlockSendBuffer, 40 }
};
-static const u16 gUnknown_843EC8C[] = {
- 0x0002, 0x7f7d, 0xFFFF
+static const u16 sAcceptedSerialNos[] = {
+ 0x0002, // Pokemon FR/LG/EM
+ 0x7f7d,
+ 0xFFFF
};
static const char sUnref_843EC92[][15] = {
@@ -183,21 +185,21 @@ static void nullsub_88(u16 unused_0, u8 unused_1, u8 unused_2, u8 unused_3)
void sub_80F85F8(void)
{
s32 i;
- u8 unk_ee_bak = Rfu.unk_ee;
+ u8 errorState_bak = Rfu.errorState;
CpuFill16(0, &Rfu, sizeof Rfu);
Rfu.unk_0c = 0xFF;
- Rfu.unk_ee = unk_ee_bak;
- if (Rfu.unk_ee != 4)
+ Rfu.errorState = errorState_bak;
+ if (Rfu.errorState != 4)
{
- Rfu.unk_ee = 0;
+ Rfu.errorState = 0;
}
for (i = 0; i < 5; i++)
{
- sub_80F9CB4(Rfu.unk_80 + i);
+ ResetSendDataManager(Rfu.unk_80 + i);
}
- sub_80F9CB4(&Rfu.unk_6c);
- sub_80FC478(&Rfu.unk_124);
- sub_80FC4D4(&Rfu.unk_9e8);
+ ResetSendDataManager(&Rfu.unk_6c);
+ RFU_queue_20_70_reset(&Rfu.unk_124);
+ RFU_queue_40_14_reset(&Rfu.unk_9e8);
CpuFill16(0, gSendCmd, sizeof gSendCmd);
CpuFill16(0, gRecvCmds, sizeof gRecvCmds);
CpuFill16(0, gLinkPlayers, sizeof gLinkPlayers);
@@ -218,7 +220,7 @@ void InitRFU(void)
void sub_80F86F4(void)
{
- if (!rfu_initializeAPI(&gRfuAPIBuffer, sizeof gRfuAPIBuffer, gIntrTable + 1, TRUE))
+ if (!rfu_initializeAPI(gf_rfu_REQ_api, RFU_API_BUFF_SIZE_RAM, gIntrTable + 1, TRUE))
{
gLinkType = 0;
sub_80FB128(FALSE);
@@ -233,28 +235,28 @@ static void sub_80F8738(u8 taskId)
switch (Rfu.unk_04)
{
case 0:
- sub_80FD4B0(&sRfuReqConfig);
+ rfu_LMAN_initializeRFU(&sRfuReqConfig);
Rfu.unk_04 = 1;
gTasks[taskId].data[1] = 1;
break;
case 1:
break;
case 2:
- sub_80FD538(Rfu.unk_0c, 0, 240, gUnknown_843EC8C);
+ rfu_LMAN_establishConnection(Rfu.unk_0c, 0, 240, (u16*)sAcceptedSerialNos);
Rfu.unk_04 = 3;
gTasks[taskId].data[1] = 6;
break;
case 3:
break;
case 4:
- sub_80FD760(FALSE);
+ rfu_LMAN_stopManager(FALSE);
Rfu.unk_04 = 5;
break;
case 5:
break;
case 18:
Rfu.unk_cdb = 0;
- sub_80FEA10(sub_80F8DA8);
+ rfu_LMAN_setMSCCallback(sub_80F8DA8);
sub_80F8AA4();
sub_80F8AEC();
Rfu.unk_04 = 20;
@@ -319,14 +321,14 @@ static void sub_80F893C(u8 taskId)
switch (Rfu.unk_04)
{
case 0:
- sub_80FD4B0(&sRfuReqConfigTemplate);
+ rfu_LMAN_initializeRFU((INIT_PARAM*)&sRfuReqConfigTemplate);
Rfu.unk_04 = 1;
gTasks[taskId].data[1] = 1;
break;
case 1:
break;
case 6:
- sub_80FD538(Rfu.unk_0c, 0, 0xf0, gUnknown_843EC8C);
+ rfu_LMAN_establishConnection(Rfu.unk_0c, 0, 240, (u16*)sAcceptedSerialNos);
Rfu.unk_04 = 7;
gTasks[taskId].data[1] = 7;
break;
@@ -343,7 +345,7 @@ static void sub_80F893C(u8 taskId)
break;
case 6:
case 9:
- sub_80FEB14();
+ rfu_LMAN_requestChangeAgbClockMaster();
Rfu.unk_ce4 = 2;
DestroyTask(taskId);
break;
@@ -351,9 +353,9 @@ static void sub_80F893C(u8 taskId)
break;
case 12:
{
- u8 r5 = 1 << Rfu.unk_c3e;
- rfu_clearSlot(TYPE_NI_SEND | TYPE_NI_RECV, Rfu.unk_c3e);
- rfu_setRecvBuffer(TYPE_UNI, Rfu.unk_c3e, Rfu.unk_c3f, sizeof(Rfu.unk_c3f));
+ u8 r5 = 1 << Rfu.child_slot;
+ rfu_clearSlot(TYPE_NI_SEND | TYPE_NI_RECV, Rfu.child_slot);
+ rfu_setRecvBuffer(TYPE_UNI, Rfu.child_slot, Rfu.unk_c3f, sizeof(Rfu.unk_c3f));
rfu_UNI_setSendData(r5, Rfu.unk_4c, sizeof(Rfu.unk_4c));
gTasks[taskId].data[1] = 8;
DestroyTask(taskId);
@@ -371,54 +373,54 @@ static void sub_80F893C(u8 taskId)
static void sub_80F8AA4(void)
{
u8 i;
- u8 r5 = gUnknown_3005E10.unk_00;
+ u8 acceptSlot = lman.acceptSlot_flag;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (r5 & 1)
+ if (acceptSlot & 1)
{
rfu_setRecvBuffer(TYPE_UNI, i, Rfu.unk_14[i], sizeof(Rfu.unk_14[i]));
rfu_clearSlot(TYPE_UNI_SEND | TYPE_UNI_RECV, i);
}
- r5 >>= 1;
+ acceptSlot >>= 1;
}
}
static void sub_80F8AEC(void)
{
- u8 r5 = gUnknown_3005E10.unk_00;
- rfu_UNI_setSendData(r5, Rfu.unk_c87, sizeof(Rfu.unk_c87));
- Rfu.unk_cda = sub_80F886C(r5);
- Rfu.unk_ce2 = r5;
- sub_80F887C(r5, -1);
+ u8 acceptSlot = lman.acceptSlot_flag;
+ rfu_UNI_setSendData(acceptSlot, Rfu.recvCmds, sizeof(Rfu.recvCmds));
+ Rfu.unk_cda = sub_80F886C(acceptSlot);
+ Rfu.bm_PartnerFlags = acceptSlot;
+ sub_80F887C(acceptSlot, -1);
Rfu.unk_0c = 1;
}
static void sub_80F8B34(u8 taskId)
{
- if (sub_80F9800()->unk_0a_0 == 0x54 && sub_80FB9F4() == 4)
+ if (GetHostRFUtgtGname()->activity == 0x54 && sub_80FB9F4() == 4)
{
- rfu_REQ_disconnect(gUnknown_3005E10.unk_00);
+ rfu_REQ_disconnect(lman.acceptSlot_flag);
rfu_waitREQComplete();
sub_80FB9E4(0, 0);
}
switch (Rfu.unk_04)
{
case 0:
- sub_80FD4B0(&sRfuReqConfig);
+ rfu_LMAN_initializeRFU(&sRfuReqConfig);
Rfu.unk_04 = 1;
gTasks[taskId].data[1] = 1;
break;
case 1:
break;
case 17:
- sub_80FD538(2, 0, 240, gUnknown_843EC8C);
- sub_80FEA10(sub_80F8D20);
+ rfu_LMAN_establishConnection(2, 0, 240, (u16*)sAcceptedSerialNos);
+ rfu_LMAN_setMSCCallback(sub_80F8D20);
Rfu.unk_04 = 18;
break;
case 18:
break;
case 13:
- if (rfu_UNI_setSendData(1 << Rfu.unk_c3e, Rfu.unk_4c, sizeof(Rfu.unk_4c)) == 0)
+ if (rfu_UNI_setSendData(1 << Rfu.child_slot, Rfu.unk_4c, sizeof(Rfu.unk_4c)) == 0)
{
Rfu.unk_0c = 0;
DestroyTask(taskId);
@@ -433,14 +435,14 @@ static void sub_80F8B34(u8 taskId)
}
break;
case 14:
- sub_80FD760(0);
+ rfu_LMAN_stopManager(0);
Rfu.unk_04 = 15;
break;
case 15:
break;
case 16:
Rfu.unk_cdb = 0;
- sub_80FEA10(sub_80F8DA8);
+ rfu_LMAN_setMSCCallback(sub_80F8DA8);
sub_80FAFE0(1);
sub_80F8AA4();
sub_80F8AEC();
@@ -456,12 +458,12 @@ static void sub_80F8B34(u8 taskId)
void sub_80F8CFC(void)
{
- sub_80FD538(1, 0, 240, gUnknown_843EC8C);
+ rfu_LMAN_establishConnection(1, 0, 240, (u16*)sAcceptedSerialNos);
}
void sub_80F8D14(void)
{
- sub_80FD760(FALSE);
+ rfu_LMAN_stopManager(FALSE);
}
static void sub_80F8D20(u16 unused)
@@ -474,16 +476,16 @@ static void sub_80F8D20(u16 unused)
}
rfu_REQ_recvData();
rfu_waitREQComplete();
- if (gRfuSlotStatusUNI[Rfu.unk_c3e]->recv.newDataFlag)
+ if (gRfuSlotStatusUNI[Rfu.child_slot]->recv.newDataFlag)
{
Rfu.unk_cd0++;
- sub_80FC588(&Rfu.unk_124, Rfu.unk_c3f);
+ RFU_queue_20_70_recv(&Rfu.unk_124, Rfu.unk_c3f);
gUnknown_203AC08.unk_06++;
sub_80F906C();
- rfu_UNI_readySendData(Rfu.unk_c3e);
- rfu_UNI_clearRecvNewDataFlag(Rfu.unk_c3e);
+ rfu_UNI_readySendData(Rfu.child_slot);
+ rfu_UNI_clearRecvNewDataFlag(Rfu.child_slot);
}
- LinkRfu_REQ_SendData_HandleParentRelationship(TRUE);
+ rfu_LMAN_REQ_sendData(TRUE);
}
static void sub_80F8DA8(u16 unused)
@@ -498,7 +500,7 @@ void sub_80F8DC0(void)
if (gQuestLogState == 2 || gQuestLogState == 3)
return;
- sub_80FD52C();
+ rfu_LMAN_powerDownRFU();
if (Rfu.unk_0c == 1)
{
if (FuncIsActiveTask(sub_80F8738) == TRUE)
@@ -550,7 +552,7 @@ static bool8 sub_80F8EA4(void)
static bool32 sub_80F8ECC(void)
{
- if (Rfu.unk_04 == 7 && !sub_80FD610(gRfuLinkStatus->partner[Rfu.unk_c3d].id, 240))
+ if (Rfu.unk_04 == 7 && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[Rfu.unk_c3d].id, 240))
{
Rfu.unk_04 = 9;
return TRUE;
@@ -567,7 +569,7 @@ static void sub_80F8F10(void)
bool8 sub_80F8F40(void)
{
- if (gUnknown_3005E10.unk_00)
+ if (lman.acceptSlot_flag)
{
return TRUE;
}
@@ -577,7 +579,7 @@ bool8 sub_80F8F40(void)
void sub_80F8F5C(void)
{
Rfu.unk_04 = 4;
- Rfu.unk_ce7 = gUnknown_3005E10.unk_00;
+ Rfu.unk_ce7 = lman.acceptSlot_flag;
}
bool32 sub_80F8F7C(bool32 a0)
@@ -616,11 +618,11 @@ static void sub_80F8FD4(void)
for (i = 0; i < 5; i++)
{
- struct UnkRfuStruct_2 *ptr = &Rfu;
+ GF_RFU_MANAGER *ptr = &Rfu;
for (j = 0; j < 7; j++)
{
- ptr->unk_c87[i][j][1] = gRecvCmds[i][j] >> 8;
- ptr->unk_c87[i][j][0] = gRecvCmds[i][j];
+ ptr->recvCmds[i][j][1] = gRecvCmds[i][j] >> 8;
+ ptr->recvCmds[i][j][0] = gRecvCmds[i][j];
}
}
CpuFill16(0, gRecvCmds, sizeof gRecvCmds);
@@ -643,8 +645,8 @@ static void sub_80F906C(void)
{
if (Rfu.unk_c3c)
{
- u8 r2 = sub_80FC888(&Rfu.unk_c1c, Rfu.unk_4c);
- if (Rfu.unk_c1c.unk_1e == 0)
+ u8 r2 = RFU_queue_2_14_send(&Rfu.unk_c1c, Rfu.unk_4c);
+ if (Rfu.unk_c1c.count == 0)
{
Rfu.unk_c3c = 0;
}
@@ -655,8 +657,8 @@ static void sub_80F906C(void)
}
if (Rfu.unk_c3c == 0)
{
- sub_80FC79C(&Rfu.unk_9e8, Rfu.unk_4c);
- sub_80FC828(&Rfu.unk_c1c, Rfu.unk_4c);
+ RFU_queue_40_14_send(&Rfu.unk_9e8, Rfu.unk_4c);
+ RFU_queue_2_14_recv(&Rfu.unk_c1c, Rfu.unk_4c);
}
}
@@ -688,26 +690,26 @@ static bool32 sub_80F911C(void)
{
rfu_REQ_recvData();
rfu_waitREQComplete();
- LinkRfu_REQ_SendData_HandleParentRelationship(FALSE);
+ rfu_LMAN_REQ_sendData(FALSE);
}
else
{
Rfu.unk_cdb = 0;
- if ((Rfu.unk_ce2 & gRfuLinkStatus->connSlotFlag) == Rfu.unk_ce2 && (Rfu.unk_ce2 & gRfuLinkStatus->connSlotFlag))
+ if ((Rfu.bm_PartnerFlags & gRfuLinkStatus->connSlotFlag) == Rfu.bm_PartnerFlags && (Rfu.bm_PartnerFlags & gRfuLinkStatus->connSlotFlag))
{
if (!Rfu.unk_cdc)
{
- if (Rfu.unk_ce3)
+ if (Rfu.bm_DisconnectSlot)
{
- sub_80FBCF8(Rfu.unk_ce3);
- Rfu.unk_ce3 = 0;
+ sub_80FBCF8(Rfu.bm_DisconnectSlot);
+ Rfu.bm_DisconnectSlot = 0;
if (Rfu.unk_ce4 == 1)
{
sub_80FB9E4(2, 0x8000);
- sub_80FB0E8(0x8000);
+ GetLinkmanErrorParams(0x8000);
return FALSE;
}
- if (!gUnknown_3005E10.unk_00)
+ if (!lman.acceptSlot_flag)
{
sub_80F8DC0();
gReceivedRemoteLinkPlayers = 0;
@@ -716,7 +718,7 @@ static bool32 sub_80F911C(void)
}
sub_80F8FD4();
rfu_UNI_readySendData(Rfu.unk_cda);
- LinkRfu_REQ_SendData_HandleParentRelationship(TRUE);
+ rfu_LMAN_REQ_sendData(TRUE);
}
else
{
@@ -741,18 +743,18 @@ static bool32 sub_80F9204(void)
rfu_waitREQComplete();
while (Rfu.unk_cdb == 0)
{
- if (Rfu.unk_ee != 0)
+ if (Rfu.errorState != 0)
{
return FALSE;
}
}
rfu_REQ_recvData();
rfu_waitREQComplete();
- if ((gUnknown_3005E10.unk_03 & Rfu.unk_ce2) == Rfu.unk_ce2)
+ if ((lman.parentAck_flag & Rfu.bm_PartnerFlags) == Rfu.bm_PartnerFlags)
{
Rfu.unk_cdc = 0;
gUnknown_203AC08.unk_06++;
- flags = gUnknown_3005E10.unk_00;
+ flags = lman.acceptSlot_flag;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
if (flags & 1)
@@ -762,7 +764,7 @@ static bool32 sub_80F9204(void)
if (Rfu.unk_cee[i] != 0xFF && (Rfu.unk_14[i][0] >> 5) != ((Rfu.unk_cee[i] + 1) & 7))
{
if (++Rfu.unk_cea[i] > 4)
- sub_80FB0E8(0x8100);
+ GetLinkmanErrorParams(0x8100);
}
else
{
@@ -796,12 +798,12 @@ static bool32 sub_80F9204(void)
rfu_setRecvBuffer(TYPE_UNI, i, Rfu.unk_14[i], sizeof(Rfu.unk_14[i]));
}
}
- sub_80F887C(Rfu.unk_ce2, Rfu.unk_ce2 | Rfu.unk_ce5);
+ sub_80F887C(Rfu.bm_PartnerFlags, Rfu.bm_PartnerFlags | Rfu.unk_ce5);
Rfu.unk_ce9 = Rfu.unk_ce5;
- Rfu.unk_ce2 |= Rfu.unk_ce5;
+ Rfu.bm_PartnerFlags |= Rfu.unk_ce5;
Rfu.unk_ce5 = 0;
- rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.unk_c87, sizeof(Rfu.unk_c87));
- Rfu.unk_cda = sub_80F886C(Rfu.unk_ce2);
+ rfu_UNI_setSendData(Rfu.bm_PartnerFlags, Rfu.recvCmds, sizeof(Rfu.recvCmds));
+ Rfu.unk_cda = sub_80F886C(Rfu.bm_PartnerFlags);
CreateTask(sub_80FAA94, 0);
}
}
@@ -845,7 +847,7 @@ static bool32 sub_80F9514(void)
u8 sp48[2 * (CMD_LENGTH - 1)];
u8 switchval;
- sub_80FC6E8(&Rfu.unk_124, sp00);
+ RFU_queue_20_70_send(&Rfu.unk_124, sp00);
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
for (j = 0; j < CMD_LENGTH - 1; j++)
@@ -854,7 +856,7 @@ static bool32 sub_80F9514(void)
}
}
sub_80F9868(0);
- if (gUnknown_3005E10.unk_02 == 0 && Rfu.unk_ce4)
+ if (lman.childClockSlave_flag == 0 && Rfu.unk_ce4)
{
rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
rfu_waitREQComplete();
@@ -867,9 +869,9 @@ static bool32 sub_80F9514(void)
if (Rfu.unk_ce4 == 1)
{
sub_80FB9E4(2, 0x9000);
- sub_80FB0E8(0x9000);
+ GetLinkmanErrorParams(0x9000);
}
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
+ lman.state = lman.next_state = 0;
Rfu.unk_ce4 = 0;
}
if (Rfu.unk_cd0)
@@ -877,7 +879,7 @@ static bool32 sub_80F9514(void)
Rfu.unk_cd0--;
CallRfuFunc();
sub_80F94BC(gSendCmd, sp48);
- sub_80FC63C(&Rfu.unk_9e8, sp48);
+ RFU_queue_40_14_recv(&Rfu.unk_9e8, sp48);
for (i = 0; i < CMD_LENGTH - 1; i++)
gSendCmd[i] = 0;
}
@@ -888,8 +890,8 @@ static void sub_80F965C(u8 unused, u32 flags)
{
s32 i, j;
- const u8 *r10 = Rfu.unk_6c.unk_04;
- for (i = 0; i < Rfu.unk_6c.unk_02; i++)
+ const u8 *r10 = Rfu.unk_6c.payload;
+ for (i = 0; i < Rfu.unk_6c.count; i++)
{
if (!(flags & 1))
{
@@ -905,7 +907,7 @@ static void sub_80F965C(u8 unused, u32 flags)
j++;j--; // Needed to match;
}
- sub_80FC63C(&Rfu.unk_9e8, gUnknown_3001FF8);
+ RFU_queue_40_14_recv(&Rfu.unk_9e8, gUnknown_3001FF8);
Rfu.unk_6c.unk_0c |= (1 << i);
}
flags >>= 1;
@@ -936,10 +938,10 @@ static u8 sub_80F9770(const u8 *a0)
{
Rfu.unk_cde[i] = a0[i];
}
- return a0[Rfu.unk_c3e];
+ return a0[Rfu.child_slot];
}
-static void rfu_func_080F97B8(void)
+static void RfuFunc_SendKeysToRfu(void)
{
static u8 gUnknown_3001188;
if (gReceivedRemoteLinkPlayers
@@ -952,20 +954,20 @@ static void rfu_func_080F97B8(void)
}
}
-struct GFtgtGname *sub_80F9800(void)
+struct GFtgtGname *GetHostRFUtgtGname(void)
{
return &gHostRFUtgtGnameBuffer;
}
bool32 IsSendingKeysToRfu(void)
{
- return Rfu.RfuFunc == rfu_func_080F97B8;
+ return Rfu.RfuFunc == RfuFunc_SendKeysToRfu;
}
-void sub_80F9828(void)
+void StartSendingKeysToRfu(void)
{
AGB_ASSERT_EX(Rfu.RfuFunc == NULL, ABSPATH("rfu.c"), 1473);
- Rfu.RfuFunc = rfu_func_080F97B8;
+ Rfu.RfuFunc = RfuFunc_SendKeysToRfu;
}
void Rfu_set_zero(void)
@@ -997,8 +999,8 @@ static void sub_80F9868(u8 unused)
if (Rfu.unk_80[i].unk_12 == 0)
{
Rfu.unk_80[i].unk_00 = 0;
- Rfu.unk_80[i].unk_02 = gRecvCmds[i][1];
- Rfu.unk_80[i].unk_11 = gRecvCmds[i][2];
+ Rfu.unk_80[i].count = gRecvCmds[i][1];
+ Rfu.unk_80[i].owner = gRecvCmds[i][2];
Rfu.unk_80[i].unk_08 = 0;
Rfu.unk_80[i].unk_12 = 1;
Rfu.unk_5c[i] = 0;
@@ -1011,11 +1013,11 @@ static void sub_80F9868(u8 unused)
Rfu.unk_80[i].unk_08 |= (1 << Rfu.unk_80[i].unk_00);
for (j = 0; j < 6; j++)
gBlockRecvBuffer[i][Rfu.unk_80[i].unk_00 * 6 + j] = gRecvCmds[i][j + 1];
- if (Rfu.unk_80[i].unk_08 == gUnknown_843EBD4[Rfu.unk_80[i].unk_02])
+ if (Rfu.unk_80[i].unk_08 == gUnknown_843EBD4[Rfu.unk_80[i].count])
{
Rfu.unk_80[i].unk_12 = 2;
Rfu_SetBlockReceivedFlag(i);
- if (sub_80F9800()->unk_0a_0 == 0x45 && gReceivedRemoteLinkPlayers != 0 && Rfu.unk_0c == 0)
+ if (GetHostRFUtgtGname()->activity == 0x45 && gReceivedRemoteLinkPlayers != 0 && Rfu.unk_0c == 0)
sub_80FAA58(gBlockRecvBuffer);
}
}
@@ -1038,7 +1040,7 @@ static void sub_80F9868(u8 unused)
if (gRecvCmds[i][1] & gRfuLinkStatus->connSlotFlag)
{
gReceivedRemoteLinkPlayers = 0;
- sub_80FEB14();
+ rfu_LMAN_requestChangeAgbClockMaster();
Rfu.unk_ce4 = gRecvCmds[i][2];
}
Rfu.playerCount = gRecvCmds[i][3];
@@ -1056,7 +1058,7 @@ static void sub_80F9868(u8 unused)
case 0xee00:
if (Rfu.unk_0c == 1)
{
- Rfu.unk_ce3 |= gRecvCmds[i][1];
+ Rfu.bm_DisconnectSlot |= gRecvCmds[i][1];
Rfu.unk_ce4 = gRecvCmds[i][2];
sub_80FA9D0(gRecvCmds[i][1]);
}
@@ -1102,14 +1104,14 @@ static bool8 sub_80F9C78(void)
return TRUE;
}
-static void sub_80F9CB4(struct UnkRfuStruct_2_Sub_6c *data)
+static void ResetSendDataManager(struct UnkRfuStruct_2_Sub_6c *data)
{
data->unk_00 = 0;
- data->unk_02 = 0;
- data->unk_04 = NULL;
+ data->count = 0;
+ data->payload = NULL;
data->unk_08 = 0;
data->unk_10 = 0;
- data->unk_11 = 0;
+ data->owner = 0;
data->unk_12 = 0;
}
@@ -1138,8 +1140,8 @@ static void sub_80F9D04(u16 command)
switch (command)
{
case 0x8800:
- gSendCmd[1] = Rfu.unk_6c.unk_02;
- gSendCmd[2] = Rfu.unk_6c.unk_11 + 0x80;
+ gSendCmd[1] = Rfu.unk_6c.count;
+ gSendCmd[2] = Rfu.unk_6c.owner + 0x80;
break;
case 0xa100:
if (sub_80F9C50())
@@ -1147,7 +1149,7 @@ static void sub_80F9D04(u16 command)
break;
case 0x7700:
case 0x7800:
- tmp = Rfu.unk_ce2 ^ Rfu.unk_ce3;
+ tmp = Rfu.bm_PartnerFlags ^ Rfu.bm_DisconnectSlot;
Rfu.playerCount = gUnknown_843EC41[tmp] + 1;
gSendCmd[1] = Rfu.playerCount;
buff = (u8 *)(gSendCmd + 2);
@@ -1172,11 +1174,11 @@ static void sub_80F9D04(u16 command)
}
}
-void sub_80F9E2C(void *a0)
+void sub_80F9E2C(void * data)
{
if (gSendCmd[0] == 0 && !sub_80FBA00())
{
- memcpy(Rfu.unk_f2, a0, sizeof(Rfu.unk_f2));
+ memcpy(Rfu.unk_f2, data, sizeof(Rfu.unk_f2));
sub_80F9D04(0x2f00);
}
}
@@ -1195,17 +1197,17 @@ bool32 Rfu_InitBlockSend(const u8 *src, size_t size)
return FALSE;
}
r4 = (size % 12) != 0;
- Rfu.unk_6c.unk_11 = GetMultiplayerId();
+ Rfu.unk_6c.owner = GetMultiplayerId();
Rfu.unk_6c.unk_10 = 1;
- Rfu.unk_6c.unk_02 = (size / 12) + r4;
+ Rfu.unk_6c.count = (size / 12) + r4;
Rfu.unk_6c.unk_00 = 0;
if (size > 0x100)
- Rfu.unk_6c.unk_04 = src;
+ Rfu.unk_6c.payload = src;
else
{
if (src != gBlockSendBuffer)
memcpy(gBlockSendBuffer, src, size);
- Rfu.unk_6c.unk_04 = gBlockSendBuffer;
+ Rfu.unk_6c.payload = gBlockSendBuffer;
}
sub_80F9D04(0x8800);
Rfu.RfuFunc = rfufunc_80F9F44;
@@ -1233,12 +1235,12 @@ static void rfufunc_80F9F44(void)
static void sub_80F9FA8(void)
{
s32 i;
- const u8 *src = Rfu.unk_6c.unk_04;
+ const u8 *src = Rfu.unk_6c.payload;
gSendCmd[0] = 0x8900 | Rfu.unk_6c.unk_00;
for (i = 0; i < 7; i++)
gSendCmd[i + 1] = (src[(i << 1) + Rfu.unk_6c.unk_00 * 12 + 1] << 8) | src[(i << 1) + Rfu.unk_6c.unk_00 * 12 + 0];
Rfu.unk_6c.unk_00++;
- if (Rfu.unk_6c.unk_02 <= Rfu.unk_6c.unk_00)
+ if (Rfu.unk_6c.count <= Rfu.unk_6c.unk_00)
{
Rfu.unk_6c.unk_10 = 0;
Rfu.RfuFunc = rfufunc_80FA020;
@@ -1247,17 +1249,17 @@ static void sub_80F9FA8(void)
static void rfufunc_80FA020(void)
{
- const u8 *src = Rfu.unk_6c.unk_04;
+ const u8 *src = Rfu.unk_6c.payload;
u8 mpId = GetMultiplayerId();
s32 i;
if (Rfu.unk_0c == 0)
{
- gSendCmd[0] = (~0x76ff) | (Rfu.unk_6c.unk_02 - 1);
+ gSendCmd[0] = (~0x76ff) | (Rfu.unk_6c.count - 1);
for (i = 0; i < 7; i++)
- gSendCmd[i + 1] = (src[(i << 1) + (Rfu.unk_6c.unk_02 - 1) * 12 + 1] << 8) | src[(i << 1) + (Rfu.unk_6c.unk_02 - 1) * 12 + 0];
- if ((u8)gRecvCmds[mpId][0] == Rfu.unk_6c.unk_02 - 1)
+ gSendCmd[i + 1] = (src[(i << 1) + (Rfu.unk_6c.count - 1) * 12 + 1] << 8) | src[(i << 1) + (Rfu.unk_6c.count - 1) * 12 + 0];
+ if ((u8)gRecvCmds[mpId][0] == Rfu.unk_6c.count - 1)
{
- if (Rfu.unk_80[mpId].unk_08 != gUnknown_843EBD4[Rfu.unk_80[mpId].unk_02])
+ if (Rfu.unk_80[mpId].unk_08 != gUnknown_843EBD4[Rfu.unk_80[mpId].count])
{
sub_80F965C(mpId, Rfu.unk_80[mpId].unk_08);
gUnknown_203AC08.unk_64++;
@@ -1280,7 +1282,7 @@ bool8 sub_80FA0F8(u8 a0)
static void sub_80FA114(void)
{
rfu_clearAllSlot();
- sub_80FD52C();
+ rfu_LMAN_powerDownRFU();
gReceivedRemoteLinkPlayers = 0;
Rfu.unk_ef = 1;
Rfu.RfuFunc = NULL;
@@ -1297,7 +1299,7 @@ static void sub_80FA160(void)
{
if (Rfu.unk_0c == 0)
{
- sub_80FEB14();
+ rfu_LMAN_requestChangeAgbClockMaster();
Rfu.unk_ce4 = 2;
}
else
@@ -1306,9 +1308,9 @@ static void sub_80FA160(void)
void LinkRfu_FatalError(void)
{
- sub_80FEB14();
+ rfu_LMAN_requestChangeAgbClockMaster();
Rfu.unk_ce4 = 1;
- Rfu.unk_ce3 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
+ Rfu.bm_DisconnectSlot = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
}
static void sub_80FA1C4(void)
@@ -1327,7 +1329,7 @@ static void sub_80FA1C4(void)
gBattleTypeFlags &= (u16)~BATTLE_TYPE_20;
if (Rfu.unk_0c == 0)
{
- Rfu.unk_ee = 3;
+ Rfu.errorState = 3;
sub_80FA160();
}
else
@@ -1367,7 +1369,7 @@ static void sub_80FA2B0(void)
if (GetMultiplayerId() != 0)
{
- if (Rfu.unk_124.unk_8c2 == 0 && Rfu.unk_fe > 0x3c)
+ if (Rfu.unk_124.count == 0 && Rfu.unk_fe > 0x3c)
{
sub_80F9D04(0x6600);
Rfu.unk_fe = 0;
@@ -1391,7 +1393,7 @@ static void sub_80FA2B0(void)
static void sub_80FA350(void)
{
- if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
+ if (Rfu.unk_124.count == 0 && gSendCmd[0] == 0)
{
sub_80F9D04(0x6600);
Rfu.RfuFunc = sub_80FA2B0;
@@ -1405,7 +1407,7 @@ static void sub_80FA388(void)
if (GetMultiplayerId() != 0)
{
- if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
+ if (Rfu.unk_124.count == 0 && gSendCmd[0] == 0)
{
sub_80F9D04(0x6600);
Rfu.RfuFunc = sub_80FA2B0;
@@ -1421,7 +1423,7 @@ static void sub_80FA388(void)
}
if (i == playerCount)
{
- if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
+ if (Rfu.unk_124.count == 0 && gSendCmd[0] == 0)
{
sub_80F9D04(0x6600);
Rfu.RfuFunc = sub_80FA350;
@@ -1439,12 +1441,12 @@ void sub_80FA42C(void)
}
}
-bool32 sub_80FA44C(u32 a0)
+bool32 RfuSerialNumberIsValid(u32 serialNo)
{
s32 i;
- for (i = 0; gUnknown_843EC8C[i] != a0; i++)
+ for (i = 0; sAcceptedSerialNos[i] != serialNo; i++)
{
- if (gUnknown_843EC8C[i] == 0xFFFF)
+ if (sAcceptedSerialNos[i] == 0xFFFF)
return FALSE;
}
return TRUE;
@@ -1453,15 +1455,15 @@ bool32 sub_80FA44C(u32 a0)
u8 sub_80FA484(bool32 a0)
{
if (!a0)
- return sub_80FEA34(0, 0);
- sub_80FEA34(1, 0x258);
+ return rfu_LMAN_setLinkRecovery(0, 0);
+ rfu_LMAN_setLinkRecovery(1, 600);
return 0;
}
void sub_80FA4A8(void)
{
Rfu.unk_cd9 = 1;
- sub_80FD760(FALSE);
+ rfu_LMAN_stopManager(FALSE);
}
u8 LinkRfu_GetMultiplayerId(void)
@@ -1507,7 +1509,7 @@ static bool8 sub_80FA528(void)
}
}
- else if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_FAILED)
+ else if (gRfuSlotStatusNI[Rfu.child_slot]->recv.state == SLOT_STATE_RECV_FAILED)
{
rfu_clearSlot(TYPE_NI_RECV, i);
}
@@ -1541,9 +1543,9 @@ bool32 sub_80FA5D4(void)
return FALSE;
}
-bool32 sub_80FA634(u16 a0, const u8 *a1)
+bool32 sub_80FA634(u16 trainerId, const u8 *trainerName)
{
- u8 r1 = sub_80FBC70(a1, a0);
+ u8 r1 = GetPartnerIndexByNameAndTrainerID(trainerName, trainerId);
if (r1 == 0xFF)
return TRUE;
if (Rfu.unk_cd1[r1] == 9)
@@ -1553,7 +1555,7 @@ bool32 sub_80FA634(u16 a0, const u8 *a1)
void sub_80FA670(u8 a0, u16 a1, const u8 *a2)
{
- u8 r4 = sub_80FBC70(a2, a1);
+ u8 r4 = GetPartnerIndexByNameAndTrainerID(a2, a1);
Rfu.unk_cd1[r4] = a0;
rfu_clearSlot(TYPE_NI_SEND, r4);
rfu_NI_setSendData(1 << r4, 8, Rfu.unk_cd1 + r4, 1);
@@ -1562,13 +1564,13 @@ void sub_80FA670(u8 a0, u16 a1, const u8 *a2)
void sub_80FA6BC(void)
{
Rfu.unk_c85 = 8;
- rfu_clearSlot(TYPE_NI_SEND, Rfu.unk_c3e);
- rfu_NI_setSendData(1 << Rfu.unk_c3e, 8, &Rfu.unk_c85, 1);
+ rfu_clearSlot(TYPE_NI_SEND, Rfu.child_slot);
+ rfu_NI_setSendData(1 << Rfu.child_slot, 8, &Rfu.unk_c85, 1);
}
-u32 sub_80FA6FC(u16 a0, const u8 *a1)
+u32 sub_80FA6FC(u16 trainerId, const u8 *trainerName)
{
- u8 r0 = sub_80FBC70(a1, a0);
+ u8 r0 = GetPartnerIndexByNameAndTrainerID(trainerName, trainerId);
if (r0 == 0xFF)
return 2;
if (gRfuSlotStatusNI[r0]->send.state == 0)
@@ -1597,18 +1599,18 @@ static s32 sub_80FA788(void)
s32 retval = 0;
if (Rfu.unk_c85 == 8)
{
- if (gRfuSlotStatusNI[Rfu.unk_c3e]->send.state == SLOT_STATE_SEND_SUCCESS || gRfuSlotStatusNI[Rfu.unk_c3e]->send.state == SLOT_STATE_SEND_FAILED)
- rfu_clearSlot(TYPE_NI_SEND, Rfu.unk_c3e);
+ if (gRfuSlotStatusNI[Rfu.child_slot]->send.state == SLOT_STATE_SEND_SUCCESS || gRfuSlotStatusNI[Rfu.child_slot]->send.state == SLOT_STATE_SEND_FAILED)
+ rfu_clearSlot(TYPE_NI_SEND, Rfu.child_slot);
}
- if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_SUCCESS || gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN)
+ if (gRfuSlotStatusNI[Rfu.child_slot]->recv.state == SLOT_STATE_RECV_SUCCESS || gRfuSlotStatusNI[Rfu.child_slot]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN)
{
- rfu_clearSlot(TYPE_NI_RECV, Rfu.unk_c3e);
+ rfu_clearSlot(TYPE_NI_RECV, Rfu.child_slot);
sub_80FB9E4(Rfu.unk_c86, 0);
retval = Rfu.unk_c86;
}
- else if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_FAILED)
+ else if (gRfuSlotStatusNI[Rfu.child_slot]->recv.state == SLOT_STATE_RECV_FAILED)
{
- rfu_clearSlot(TYPE_NI_RECV, Rfu.unk_c3e);
+ rfu_clearSlot(TYPE_NI_RECV, Rfu.child_slot);
retval = 6;
}
return retval;
@@ -1682,7 +1684,7 @@ static void sub_80FA834(u8 taskId)
DestroyTask(taskId);
gReceivedRemoteLinkPlayers = 1;
Rfu.unk_ce8 = FALSE;
- sub_80FEA34(1, 0x258);
+ rfu_LMAN_setLinkRecovery(1, 600);
if (Rfu.unk_ce6)
{
for (i = 0; i < RFU_CHILD_MAX; i++)
@@ -1840,42 +1842,42 @@ static void sub_80FACF0(u8 taskId)
}
}
-static void sub_80FAD98(void)
+static void RfuCheckErrorStatus(void)
{
- if (Rfu.unk_ee == 1 && gUnknown_3005E10.unk_02 == 0)
+ if (Rfu.errorState == 1 && lman.childClockSlave_flag == 0)
{
if (gMain.callback2 == c2_mystery_gift_e_reader_run)
gWirelessCommType = 2;
SetMainCallback2(CB2_LinkError);
gMain.savedCallback = CB2_LinkError;
- sub_800ACBC((Rfu.unk_0a << 16) | (Rfu.unk_10 << 8) | Rfu.unk_12, Rfu.unk_124.unk_8c2, Rfu.unk_9e8.unk_232, sub_80FB9F4() == 2);
- Rfu.unk_ee = 2;
+ SetLinkErrorFromRfu((Rfu.linkman_msg << 16) | (Rfu.linkman_param[0] << 8) | Rfu.linkman_param[1], Rfu.unk_124.count, Rfu.unk_9e8.count, sub_80FB9F4() == 2);
+ Rfu.errorState = 2;
CloseLink();
}
- else if (Rfu.unk_9e8.unk_233 == 1 || Rfu.unk_124.unk_8c3 == 1)
+ else if (Rfu.unk_9e8.full == 1 || Rfu.unk_124.full == 1)
{
- if (gUnknown_3005E10.unk_02)
- sub_80FEB14();
+ if (lman.childClockSlave_flag)
+ rfu_LMAN_requestChangeAgbClockMaster();
sub_80FB9E4(1, 0x7000);
- sub_80FB0E8(0x7000);
+ GetLinkmanErrorParams(0x7000);
}
}
static void rfu_REQ_recvData_then_sendData(void)
{
- if (gUnknown_3005E10.unk_06 == 1)
+ if (lman.parent_child == MODE_PARENT)
{
rfu_REQ_recvData();
rfu_waitREQComplete();
- LinkRfu_REQ_SendData_HandleParentRelationship(0);
+ rfu_LMAN_REQ_sendData(RFU_CHILD_CLOCK_SLAVE_OFF);
}
}
-bool32 sub_80FAE94(void)
+bool32 LinkRfuMain1(void)
{
bool32 retval = FALSE;
Rfu.unk_ccd = 0;
- sub_80FDA30(Random());
+ rfu_LMAN_manager_entity(Random());
if (Rfu.unk_ef == 0)
{
switch (Rfu.unk_0c)
@@ -1894,14 +1896,14 @@ bool32 sub_80FAE94(void)
return retval;
}
-bool32 sub_80FAEF0(void)
+bool32 LinkRfuMain2(void)
{
bool32 retval = FALSE;
if (Rfu.unk_ef == 0)
{
if (Rfu.unk_0c == 1)
retval = sub_80F9204();
- sub_80FAD98();
+ RfuCheckErrorStatus();
}
return retval;
}
@@ -1955,11 +1957,11 @@ void sub_80FB030(u32 linkPlayerCount)
u32 r7;
s32 r8;
- if (sub_80F9800()->unk_0a_0 == 0x45)
+ if (GetHostRFUtgtGname()->activity == 0x45)
{
r5 = 0;
r7 = 0;
- r8 = Rfu.unk_ce2 ^ Rfu.unk_ce3;
+ r8 = Rfu.bm_PartnerFlags ^ Rfu.bm_DisconnectSlot;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
if ((r8 >> i) & 1)
@@ -1975,33 +1977,33 @@ void sub_80FB030(u32 linkPlayerCount)
}
}
-static void sub_80FB0E8(u32 a0)
+static void GetLinkmanErrorParams(u32 msg)
{
- if (Rfu.unk_ee == 0)
+ if (Rfu.errorState == 0)
{
- Rfu.unk_10 = gUnknown_3005E10.unk_14;
- Rfu.unk_12 = gUnknown_3005E10.unk_16;
- Rfu.unk_0a = a0;
- Rfu.unk_ee = 1;
+ Rfu.linkman_param[0] = lman.param[0];
+ Rfu.linkman_param[1] = lman.param[1];
+ Rfu.linkman_msg = msg;
+ Rfu.errorState = 1;
}
}
static void sub_80FB118(void)
{
- Rfu.unk_ee = 0;
+ Rfu.errorState = 0;
}
void sub_80FB128(bool32 a0)
{
if (!a0)
- Rfu.unk_ee = 0;
+ Rfu.errorState = 0;
else
- Rfu.unk_ee = 4;
+ Rfu.errorState = 4;
}
static void sub_80FB154(void)
{
- sub_80FBE20(gUnknown_3005E10.unk_00, 1);
+ sub_80FBE20(lman.acceptSlot_flag, 1);
Rfu.RfuFunc = NULL;
}
@@ -2010,25 +2012,25 @@ static void sub_80FB174(void)
Rfu.RfuFunc = sub_80FB154;
}
-static void sub_80FB184(u8 a0, u8 unused1)
+static void sub_80FB184(u8 msg, u8 param_count)
{
u8 i;
u8 r6 = 0;
- switch (a0)
+ switch (msg)
{
- case 0x00:
+ case LMAN_MSG_INITIALIZE_COMPLETED:
Rfu.unk_04 = 2;
break;
- case 0x10:
+ case LMAN_MSG_NEW_CHILD_CONNECT_DETECTED:
break;
- case 0x11:
- sub_80FB564(gUnknown_3005E10.unk_14);
+ case LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED:
+ sub_80FB564(lman.param[0]);
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((gUnknown_3005E10.unk_14 >> i) & 1)
+ if ((lman.param[0] >> i) & 1)
{
struct GFtgtGname *structPtr = (void *)&gRfuLinkStatus->partner[i].gname;
- if (structPtr->unk_0a_0 == sub_80F9800()->unk_0a_0)
+ if (structPtr->activity == GetHostRFUtgtGname()->activity)
{
Rfu.unk_cd1[i] = 0;
Rfu.unk_cd5[i] = 0;
@@ -2046,50 +2048,54 @@ static void sub_80FB184(u8 a0, u8 unused1)
rfu_waitREQComplete();
}
break;
- case 0x12:
+ case LMAN_MSG_NEW_CHILD_CONNECT_REJECTED:
break;
- case 0x13:
+ case LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED:
break;
- case 0x14:
- if (Rfu.unk_ce7 != gUnknown_3005E10.unk_00)
+ case LMAN_MSG_END_WAIT_CHILD_NAME:
+ if (Rfu.unk_ce7 != lman.acceptSlot_flag)
{
- rfu_REQ_disconnect(Rfu.unk_ce7 ^ gUnknown_3005E10.unk_00);
+ rfu_REQ_disconnect(Rfu.unk_ce7 ^ lman.acceptSlot_flag);
rfu_waitREQComplete();
}
Rfu.unk_04 = 0x11;
break;
- case 0x31:
- Rfu.unk_f0 = 1;
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY:
+ Rfu.linkLossRecoveryState = 1;
break;
- case 0x32:
- Rfu.unk_f0 = 3;
+ case LMAN_MSG_LINK_RECOVERY_SUCCESSED:
+ Rfu.linkLossRecoveryState = 3;
break;
- case 0x30:
- case 0x33:
- Rfu.unk_f0 = 4;
- Rfu.unk_ce2 &= ~gUnknown_3005E10.unk_14;
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED:
+ case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED:
+ Rfu.linkLossRecoveryState = 4;
+ Rfu.bm_PartnerFlags &= ~lman.param[0];
if (gReceivedRemoteLinkPlayers == 1)
{
- if (Rfu.unk_ce2 == 0)
- sub_80FB0E8(a0);
+ if (Rfu.bm_PartnerFlags == 0)
+ GetLinkmanErrorParams(msg);
else
sub_80FB174();
}
- sub_80FB9E4(2, a0);
+ sub_80FB9E4(2, msg);
break;
case 0x34:
break;
- case 0x42 ... 0x44:
+ case LMAN_MSG_RFU_POWER_DOWN:
+ case LMAN_MSG_MANAGER_STOPPED:
+ case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET:
break;
- case 0xf3:
- sub_80FB9E4(1, a0);
- sub_80FB0E8(a0);
+ case LMAN_MSG_LMAN_API_ERROR_RETURN:
+ sub_80FB9E4(1, msg);
+ GetLinkmanErrorParams(msg);
Rfu.unk_ef = 1;
break;
- case 0xf0 ... 0xf2:
- case 0xff:
- sub_80FB0E8(a0);
- sub_80FB9E4(1, a0);
+ case LMAN_MSG_REQ_API_ERROR:
+ case LMAN_MSG_WATCH_DOG_TIMER_ERROR:
+ case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA:
+ case LMAN_MSG_RFU_FATAL_ERROR:
+ GetLinkmanErrorParams(msg);
+ sub_80FB9E4(1, msg);
Rfu.unk_cdb = 1;
break;
}
@@ -2097,68 +2103,72 @@ static void sub_80FB184(u8 a0, u8 unused1)
static const u8 unref_843EDF3[] = _(" あきと");
-static void sub_80FB37C(u8 a0, u8 unused1)
+static void sub_80FB37C(u8 msg, u8 param_count)
{
- switch (a0)
+ switch (msg)
{
- case 0x00:
+ case LMAN_MSG_INITIALIZE_COMPLETED:
Rfu.unk_04 = 6;
break;
- case 0x20:
- Rfu.unk_ccd = gUnknown_3005E10.unk_14;
+ case LMAN_MSG_PARENT_FOUND:
+ Rfu.unk_ccd = lman.param[0];
break;
- case 0x21:
+ case LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED:
break;
- case 0x22:
- Rfu.unk_c3e = gUnknown_3005E10.unk_14;
+ case LMAN_MSG_CONNECT_PARENT_SUCCESSED:
+ Rfu.child_slot = lman.param[0];
break;
- case 0x23:
- sub_80FB9E4(2, a0);
+ case LMAN_MSG_CONNECT_PARENT_FAILED:
+ sub_80FB9E4(2, msg);
break;
- case 0x24:
+ case LMAN_MSG_CHILD_NAME_SEND_COMPLETED:
Rfu.unk_04 = 11;
Rfu.unk_c85 = 0;
Rfu.unk_c86 = 0;
- rfu_setRecvBuffer(TYPE_NI, Rfu.unk_c3e, &Rfu.unk_c86, 1);
- rfu_setRecvBuffer(TYPE_UNI, Rfu.unk_c3e, Rfu.unk_c3f, 70);
+ rfu_setRecvBuffer(TYPE_NI, Rfu.child_slot, &Rfu.unk_c86, 1);
+ rfu_setRecvBuffer(TYPE_UNI, Rfu.child_slot, Rfu.unk_c3f, sizeof(Rfu.unk_c3f));
break;
- case 0x25:
- sub_80FB9E4(2, 0x25);
+ case LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED:
+ sub_80FB9E4(2, msg);
break;
- case 0x30:
- Rfu.unk_f0 = 2;
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED:
+ Rfu.linkLossRecoveryState = 2;
if (Rfu.unk_c86 == 6)
break;
- case 0x33:
- if (Rfu.unk_f0 != 2)
- Rfu.unk_f0 = 4;
+ case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED:
+ if (Rfu.linkLossRecoveryState != 2)
+ Rfu.linkLossRecoveryState = 4;
if (Rfu.unk_c86 != 9)
- sub_80FB9E4(2, a0);
+ sub_80FB9E4(2, msg);
nullsub_87("LINK LOSS DISCONNECT!", 5, 5);
if (gReceivedRemoteLinkPlayers == 1)
- sub_80FB0E8(a0);
+ GetLinkmanErrorParams(msg);
break;
- case 0x31:
- Rfu.unk_f0 = 1;
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY:
+ Rfu.linkLossRecoveryState = 1;
nullsub_87("LINK LOSS RECOVERY NOW", 5, 5);
break;
- case 0x32:
- Rfu.unk_f0 = 3;
+ case LMAN_MSG_LINK_RECOVERY_SUCCESSED:
+ Rfu.linkLossRecoveryState = 3;
Rfu.unk_c3c = 1;
break;
case 0x34:
break;
- case 0x42 ... 0x44:
+ case LMAN_MSG_RFU_POWER_DOWN:
+ case LMAN_MSG_MANAGER_STOPPED:
+ case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET:
break;
- case 0xF3:
- sub_80FB9E4(1, a0);
- sub_80FB0E8(a0);
+ case LMAN_MSG_LMAN_API_ERROR_RETURN:
+ sub_80FB9E4(1, msg);
+ GetLinkmanErrorParams(msg);
Rfu.unk_ef = 1;
break;
- case 0xF0 ... 0xF2:
- case 0xFF:
- sub_80FB9E4(1, a0);
- sub_80FB0E8(a0);
+ case LMAN_MSG_REQ_API_ERROR:
+ case LMAN_MSG_WATCH_DOG_TIMER_ERROR:
+ case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA:
+ case LMAN_MSG_RFU_FATAL_ERROR:
+ sub_80FB9E4(1, msg);
+ GetLinkmanErrorParams(msg);
Rfu.unk_cdb = 1;
break;
}
@@ -2188,7 +2198,7 @@ static u8 sub_80FB5A0(s32 a0)
if ((a0 >> i) & 1)
{
struct GFtgtGname *structPtr = (void *)&gRfuLinkStatus->partner[i].gname;
- if (structPtr->unk_0a_0 == 0x45)
+ if (structPtr->activity == 0x45)
ret |= (1 << i);
}
}
@@ -2196,22 +2206,22 @@ static u8 sub_80FB5A0(s32 a0)
return ret;
}
-static void sub_80FB5EC(u8 a0, u8 unused1)
+static void sub_80FB5EC(u8 msg, u8 param_count)
{
u8 r1;
- switch (a0)
+ switch (msg)
{
- case 0x00:
+ case LMAN_MSG_INITIALIZE_COMPLETED:
Rfu.unk_04 = 0x11;
break;
- case 0x10:
+ case LMAN_MSG_NEW_CHILD_CONNECT_DETECTED:
sub_80FB9E4(4, 0);
break;
- case 0x11:
- if (sub_80F9800()->unk_0a_0 == 0x45 && Rfu.unk_cd9 == 0)
+ case LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED:
+ if (GetHostRFUtgtGname()->activity == 0x45 && Rfu.unk_cd9 == 0)
{
- u8 idx = sub_80FB5A0(gUnknown_3005E10.unk_14);
+ u8 idx = sub_80FB5A0(lman.param[0]);
if (idx != 0)
{
r1 = 1 << sub_80F886C(idx);
@@ -2226,42 +2236,42 @@ static void sub_80FB5EC(u8 a0, u8 unused1)
Rfu.unk_ce6 |= idx;
}
}
- if (idx != gUnknown_3005E10.unk_14)
+ if (idx != lman.param[0])
{
- Rfu.unk_ce3 |= (idx ^ gUnknown_3005E10.unk_14);
+ Rfu.bm_DisconnectSlot |= (idx ^ lman.param[0]);
Rfu.unk_ce4 = 2;
}
}
- else if (sub_80F9800()->unk_0a_0 == 0x54)
+ else if (GetHostRFUtgtGname()->activity == 0x54)
{
- rfu_REQ_disconnect(gUnknown_3005E10.unk_00);
+ rfu_REQ_disconnect(lman.acceptSlot_flag);
rfu_waitREQComplete();
}
- sub_80FB564(gUnknown_3005E10.unk_14);
+ sub_80FB564(lman.param[0]);
break;
- case 0x12:
+ case LMAN_MSG_NEW_CHILD_CONNECT_REJECTED:
break;
- case 0x13:
+ case LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED:
break;
- case 0x14:
- if (sub_80F9800()->unk_0a_0 != 0x45 && gUnknown_3005E10.unk_01 > 1)
+ case LMAN_MSG_END_WAIT_CHILD_NAME:
+ if (GetHostRFUtgtGname()->activity != 0x45 && lman.acceptCount > 1)
{
- r1 = 1 << sub_80F886C(gUnknown_3005E10.unk_14);
- rfu_REQ_disconnect(gUnknown_3005E10.unk_00 ^ r1);
+ r1 = 1 << sub_80F886C(lman.param[0]);
+ rfu_REQ_disconnect(lman.acceptSlot_flag ^ r1);
rfu_waitREQComplete();
}
if (Rfu.unk_04 == 0xF)
Rfu.unk_04 = 0x10;
break;
- case 0x20:
- Rfu.unk_ccd = gUnknown_3005E10.unk_14;
+ case LMAN_MSG_PARENT_FOUND:
+ Rfu.unk_ccd = lman.param[0];
break;
- case 0x21:
+ case LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED:
break;
- case 0x22:
- Rfu.unk_c3e = gUnknown_3005E10.unk_14;
+ case LMAN_MSG_CONNECT_PARENT_SUCCESSED:
+ Rfu.child_slot = lman.param[0];
break;
- case 0x23:
+ case LMAN_MSG_CONNECT_PARENT_FAILED:
Rfu.unk_04 = 0x12;
if (Rfu.unk_ccf < 2)
{
@@ -2270,67 +2280,72 @@ static void sub_80FB5EC(u8 a0, u8 unused1)
}
else
{
- sub_80FB9E4(2, a0);
+ sub_80FB9E4(2, msg);
}
break;
- case 0x24:
+ case LMAN_MSG_CHILD_NAME_SEND_COMPLETED:
Rfu.unk_04 = 0xD;
sub_80FB9E4(3, 0);
- rfu_setRecvBuffer(TYPE_UNI, Rfu.unk_c3e, Rfu.unk_c3f, sizeof(Rfu.unk_c3f));
+ rfu_setRecvBuffer(TYPE_UNI, Rfu.child_slot, Rfu.unk_c3f, sizeof(Rfu.unk_c3f));
break;
- case 0x25:
- sub_80FB9E4(2, a0);
+ case LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED:
+ sub_80FB9E4(2, msg);
break;
- case 0x31:
- if (gUnknown_3005E10.unk_00 & gUnknown_3005E10.unk_14)
- Rfu.unk_f0 = 1;
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY:
+ if (lman.acceptSlot_flag & lman.param[0])
+ Rfu.linkLossRecoveryState = 1;
break;
- case 0x32:
- Rfu.unk_f0 = 3;
+ case LMAN_MSG_LINK_RECOVERY_SUCCESSED:
+ Rfu.linkLossRecoveryState = 3;
if (gRfuLinkStatus->parentChild == MODE_CHILD)
Rfu.unk_c3c = 1;
break;
- case 0x30:
- Rfu.unk_f0 = 2;
- case 0x33:
- if (Rfu.unk_f0 != 2)
- Rfu.unk_f0 = 4;
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED:
+ Rfu.linkLossRecoveryState = 2;
+ // fallthrough
+ case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED:
+ if (Rfu.linkLossRecoveryState != 2)
+ Rfu.linkLossRecoveryState = 4;
if (Rfu.unk_0c == 1)
{
if (gReceivedRemoteLinkPlayers == 1)
{
- Rfu.unk_ce2 &= ~(gUnknown_3005E10.unk_14);
- if (Rfu.unk_ce2 == 0)
- sub_80FB0E8(a0);
+ Rfu.bm_PartnerFlags &= ~(lman.param[0]);
+ if (Rfu.bm_PartnerFlags == 0)
+ GetLinkmanErrorParams(msg);
else
sub_80FB174();
}
}
else if (Rfu.unk_ce4 != 2 && gReceivedRemoteLinkPlayers == 1)
{
- sub_80FB0E8(a0);
- sub_80FD760(0);
+ GetLinkmanErrorParams(msg);
+ rfu_LMAN_stopManager(0);
}
- if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && gUnknown_3005E10.unk_07 == 0 && FuncIsActiveTask(sub_80F8B34) == TRUE)
+ if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && lman.pcswitch_flag == 0 && FuncIsActiveTask(sub_80F8B34) == TRUE)
Rfu.unk_04 = 0x11;
- sub_80FB9E4(2, a0);
+ sub_80FB9E4(2, msg);
break;
- case 0x40:
- Rfu.unk_ce3 = 0;
+ case LMAN_MSG_LINK_DISCONNECTED_BY_USER:
+ Rfu.bm_DisconnectSlot = 0;
break;
- case 0x42 ... 0x44:
+ case LMAN_MSG_RFU_POWER_DOWN:
+ case LMAN_MSG_MANAGER_STOPPED:
+ case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET:
break;
- case 0xF3:
- sub_80FB9E4(1, a0);
- sub_80FB0E8(a0);
+ case LMAN_MSG_LMAN_API_ERROR_RETURN:
+ sub_80FB9E4(1, msg);
+ GetLinkmanErrorParams(msg);
Rfu.unk_ef = 1;
break;
- case 0xF0 ... 0xF2:
- case 0xFF:
- sub_80FB0E8(a0);
- sub_80FB9E4(1, a0);
+ case LMAN_MSG_REQ_API_ERROR:
+ case LMAN_MSG_WATCH_DOG_TIMER_ERROR:
+ case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA:
+ case LMAN_MSG_RFU_FATAL_ERROR:
+ GetLinkmanErrorParams(msg);
+ sub_80FB9E4(1, msg);
Rfu.unk_cdb = 0;
break;
}
@@ -2341,10 +2356,10 @@ void sub_80FB9D0(void)
Rfu.unk_ce4 = 2;
}
-void sub_80FB9E4(u8 a0, u16 a1)
+void sub_80FB9E4(u8 a0, u16 msg)
{
Rfu.unk_f1 = a0;
- Rfu.unk_0a = a1;
+ Rfu.linkman_msg = msg;
}
u8 sub_80FB9F4(void)
@@ -2354,8 +2369,8 @@ u8 sub_80FB9F4(void)
bool32 sub_80FBA00(void)
{
- u32 var = sub_80FB9F4() - 1;
- if (var < 2)
+ u32 var = sub_80FB9F4();
+ if (var == 1 || var == 2)
return TRUE;
else
return FALSE;
@@ -2373,7 +2388,7 @@ bool8 Rfu_IsMaster(void)
void RFUVSync(void)
{
- LinkRfu_syncVBlank_();
+ rfu_LMAN_syncVBlank();
}
void sub_80FBA44(void)
@@ -2445,9 +2460,9 @@ void sub_80FBB8C(u32 a0)
{
Rfu.unk_0c = 1;
sub_80FAF1C();
- sub_80FD430(sub_80FB184, NULL);
+ rfu_LMAN_initializeManager(sub_80FB184, NULL);
sRfuReqConfig = sRfuReqConfigTemplate;
- sRfuReqConfig.availSlotFlag = sAvailSlots[a0 - 1];
+ sRfuReqConfig.availSlot_flag = sAvailSlots[a0 - 1];
sub_80F8E74();
}
@@ -2455,7 +2470,7 @@ void sub_80FBBD8(void)
{
Rfu.unk_0c = 0;
sub_80FAF1C();
- sub_80FD430(sub_80FB37C, sub_80F8D20);
+ rfu_LMAN_initializeManager(sub_80FB37C, sub_80F8D20);
sub_80F8F10();
}
@@ -2465,10 +2480,10 @@ void sub_80FBC00(void)
return;
Rfu.unk_0c = 2;
sub_80FAF1C();
- sub_80FD430(sub_80FB5EC, NULL);
+ rfu_LMAN_initializeManager(sub_80FB5EC, NULL);
sRfuReqConfig = sRfuReqConfigTemplate;
- sRfuReqConfig.unk_11 = 0;
- sRfuReqConfig.unk_12 = 0x258;
+ sRfuReqConfig.linkRecovery_enable = 0;
+ sRfuReqConfig.linkRecovery_period = 600;
Rfu.unk_67 = CreateTask(sub_80F8B34, 1);
}
@@ -2478,17 +2493,24 @@ static u16 ReadU16(const void *ptr)
return (ptr_[1] << 8) | (ptr_[0]);
}
-static u8 sub_80FBC70(const u8 *a0, u16 a1)
+/*
+ * ================================================================
+ * Looks up the player by uname and pid. Returns the index in
+ * gRfuLinkStatus->partner of the first match with a valid slot ID.
+ * Returns 0xFF if not found.
+ * ================================================================
+ */
+static u8 GetPartnerIndexByNameAndTrainerID(const u8 *trainerName, u16 trainerId)
{
u8 i;
u8 ret = 0xFF;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- u16 trainerId = ReadU16(((struct GFtgtGname *)gRfuLinkStatus->partner[i].gname)->unk_00.playerTrainerId);
- if (sub_80FA44C(gRfuLinkStatus->partner[i].serialNo)
- && !StringCompare(a0, gRfuLinkStatus->partner[i].uname)
- && a1 == trainerId)
+ u16 partnerTrainerId = ReadU16(((struct GFtgtGname *)gRfuLinkStatus->partner[i].gname)->unk_00.playerTrainerId);
+ if (RfuSerialNumberIsValid(gRfuLinkStatus->partner[i].serialNo)
+ && !StringCompare(trainerName, gRfuLinkStatus->partner[i].uname)
+ && trainerId == partnerTrainerId)
{
ret = i;
if (gRfuLinkStatus->partner[i].slot != 0xFF)
@@ -2499,19 +2521,19 @@ static u8 sub_80FBC70(const u8 *a0, u16 a1)
return ret;
}
-static void sub_80FBCF8(u32 a0)
+static void sub_80FBCF8(u32 bmDisconnectSlot)
{
- rfu_REQ_disconnect(a0);
+ rfu_REQ_disconnect(bmDisconnectSlot);
rfu_waitREQComplete();
- Rfu.unk_ce2 &= ~(a0);
+ Rfu.bm_PartnerFlags &= ~(bmDisconnectSlot);
rfu_clearSlot(TYPE_UNI_SEND, Rfu.unk_cda);
- rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.unk_c87, 70);
- Rfu.unk_cda = sub_80F886C(Rfu.unk_ce2);
+ rfu_UNI_setSendData(Rfu.bm_PartnerFlags, Rfu.recvCmds, 70);
+ Rfu.unk_cda = sub_80F886C(Rfu.bm_PartnerFlags);
}
-void sub_80FBD4C(const u8 *ptr, u16 a1)
+void sub_80FBD4C(const u8 *trainerName, u16 trainerId)
{
- u8 var = sub_80FBC70(ptr, a1);
+ u8 var = GetPartnerIndexByNameAndTrainerID(trainerName, trainerId);
if (var != 0xFF)
sub_80FBCF8(1 << var);
}
@@ -2525,7 +2547,7 @@ void sub_80FBD6C(u32 a0)
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (Rfu.unk_cde[i] == a0 && (Rfu.unk_ce2 >> i) & 1)
+ if (Rfu.unk_cde[i] == a0 && (Rfu.bm_PartnerFlags >> i) & 1)
var |= 1 << i;
}
if (var)
@@ -2568,7 +2590,7 @@ static void sub_80FBE80(u8 taskId)
if (sub_80F8EA4())
{
- u8 id = sub_80FBC70((u8*)data, ReadU16(&data[8]));
+ u8 id = GetPartnerIndexByNameAndTrainerID((u8*)data, ReadU16(&data[8]));
if (id != 0xFF)
{
if (gRfuLinkStatus->partner[id].slot != 0xFF)
@@ -2577,7 +2599,7 @@ static void sub_80FBE80(u8 taskId)
if (sub_80F8ECC())
DestroyTask(taskId);
}
- else if (sub_80F9800()->unk_0a_0 == 0x15 || sub_80F9800()->unk_0a_0 == 0x16)
+ else if (GetHostRFUtgtGname()->activity == 0x15 || GetHostRFUtgtGname()->activity == 0x16)
{
data[15]++;
}
@@ -2619,12 +2641,12 @@ void sub_80FBF54(const u8 *src, u16 trainerId)
static bool32 sub_80FBF98(s16 a1, struct GFtgtGname *structPtr)
{
- if (sub_80F9800()->unk_0a_0 == 0x45)
+ if (GetHostRFUtgtGname()->activity == 0x45)
{
- if (structPtr->unk_0a_0 != 0x45)
+ if (structPtr->activity != 0x45)
return TRUE;
}
- else if (structPtr->unk_0a_0 != 0x40)
+ else if (structPtr->activity != 0x40)
{
return TRUE;
}
@@ -2660,15 +2682,15 @@ static void sub_80FC028(u8 taskId)
DestroyTask(taskId);
}
- if (Rfu.unk_ccd != 0 && gUnknown_3005E10.unk_06 == 0)
+ if (Rfu.unk_ccd != 0 && lman.parent_child == 0)
{
u16 trainerId = ReadU16(((struct GFtgtGname *)&Rfu.unk_104.gname)->unk_00.playerTrainerId);
- u8 id = sub_80FBC70(Rfu.unk_104.uname, trainerId);
+ u8 id = GetPartnerIndexByNameAndTrainerID(Rfu.unk_104.uname, trainerId);
if (id != 0xFF)
{
if (!sub_80FBF98(gTasks[taskId].data[1], (struct GFtgtGname *)&gRfuLinkStatus->partner[id].gname))
{
- if (gRfuLinkStatus->partner[id].slot != 0xFF && !sub_80FD610(gRfuLinkStatus->partner[id].id, 0x5A))
+ if (gRfuLinkStatus->partner[id].slot != 0xFF && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[id].id, 0x5A))
{
Rfu.unk_04 = 0xA;
DestroyTask(taskId);
@@ -2691,7 +2713,7 @@ void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2)
Rfu.unk_f1 = 0;
StringCopy(Rfu.unk_104.uname, name);
memcpy(Rfu.unk_104.gname, structPtr, RFU_GAME_NAME_LENGTH);
- sub_80FEB3C();
+ rfu_LMAN_forceChangeSP();
taskId = CreateTask(sub_80FC028, 2);
gTasks[taskId].data[1] = a2;
taskId2 = FindTaskIdByFunc(sub_80F8B34);
@@ -2709,7 +2731,7 @@ void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2)
bool8 sub_80FC1B0(void)
{
- if (Rfu.unk_f0 == 1)
+ if (Rfu.linkLossRecoveryState == 1)
return TRUE;
else
return FALSE;
@@ -2721,7 +2743,7 @@ bool32 sub_80FC1CC(void)
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((gUnknown_3005E10.unk_00 >> i) & 1 && Rfu.unk_cd1[i] == 0)
+ if ((lman.acceptSlot_flag >> i) & 1 && Rfu.unk_cd1[i] == 0)
return FALSE;
}
@@ -2784,9 +2806,9 @@ static void sub_80FC228(void)
nullsub_87(gUnknown_843EE47, 6, i + 3);
nullsub_87(gUnknown_843EE57, 0x16, i + 3);
}
- nullsub_88(gRfuLinkStatus->partner[Rfu.unk_c3e].serialNo, 1, 3, 4);
- nullsub_87(gRfuLinkStatus->partner[Rfu.unk_c3e].gname, 6, 3);
- nullsub_87(gRfuLinkStatus->partner[Rfu.unk_c3e].uname, 0x16, 3);
+ nullsub_88(gRfuLinkStatus->partner[Rfu.child_slot].serialNo, 1, 3, 4);
+ nullsub_87(gRfuLinkStatus->partner[Rfu.child_slot].gname, 6, 3);
+ nullsub_87(gRfuLinkStatus->partner[Rfu.child_slot].uname, 0x16, 3);
}
else
{
@@ -2824,12 +2846,12 @@ static const char gUnknown_843EEA8[][8] = {
static u32 sub_80FC44C(void)
{
- return Rfu.unk_9e8.unk_232;
+ return Rfu.unk_9e8.count;
}
u32 GetRfuRecvQueueLength(void)
{
- return Rfu.unk_124.unk_8c2;
+ return Rfu.unk_124.count;
}
static void nullsub_89(u8 taskId)
diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c
index 69b6603a8..d7866b98a 100644
--- a/src/link_rfu_3.c
+++ b/src/link_rfu_3.c
@@ -166,7 +166,7 @@ static const struct SpriteTemplate sWirelessStatusIndicatorSpriteTemplate = {
SpriteCallbackDummy
};
-void sub_80FC478(struct UnkRfuStruct_2_Sub_124 *ptr)
+void RFU_queue_20_70_reset(struct UnkRfuStruct_2_Sub_124 *queue)
{
s32 i;
s32 j;
@@ -175,16 +175,16 @@ void sub_80FC478(struct UnkRfuStruct_2_Sub_124 *ptr)
{
for (j = 0; j < 70; j++)
{
- ptr->unk_00[i][j] = 0;
+ queue->slots[i][j] = 0;
}
}
- ptr->unk_8c1 = 0;
- ptr->unk_8c0 = 0;
- ptr->unk_8c2 = 0;
- ptr->unk_8c3 = 0;
+ queue->send_slot = 0;
+ queue->recv_slot = 0;
+ queue->count = 0;
+ queue->full = 0;
}
-void sub_80FC4D4(struct UnkRfuStruct_2_Sub_9e8 *ptr)
+void RFU_queue_40_14_reset(struct UnkRfuStruct_2_Sub_9e8 *ptr)
{
s32 i;
s32 j;
@@ -193,16 +193,16 @@ void sub_80FC4D4(struct UnkRfuStruct_2_Sub_9e8 *ptr)
{
for (j = 0; j < 14; j++)
{
- ptr->unk_00[i][j] = 0;
+ ptr->slots[i][j] = 0;
}
}
- ptr->unk_231 = 0;
- ptr->unk_230 = 0;
- ptr->unk_232 = 0;
- ptr->unk_233 = 0;
+ ptr->send_slot = 0;
+ ptr->recv_slot = 0;
+ ptr->count = 0;
+ ptr->full = 0;
}
-static void sub_80FC530(struct UnkRfuStruct_Sub_Unused *ptr)
+static void RFU_queue_2_256_reset(struct UnkRfuStruct_Sub_Unused *ptr)
{
s32 i;
s32 j;
@@ -211,29 +211,29 @@ static void sub_80FC530(struct UnkRfuStruct_Sub_Unused *ptr)
{
for (j = 0; j < 256; j++)
{
- ptr->unk_00[i][j] = 0;
+ ptr->slots[i][j] = 0;
}
}
- ptr->unk_201 = 0;
- ptr->unk_200 = 0;
- ptr->unk_202 = 0;
- ptr->unk_203 = 0;
+ ptr->send_slot = 0;
+ ptr->recv_slot = 0;
+ ptr->count = 0;
+ ptr->full = 0;
}
-void sub_80FC588(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2)
+void RFU_queue_20_70_recv(struct UnkRfuStruct_2_Sub_124 *queue, u8 *data)
{
s32 i;
u16 imeBak;
u8 count;
- if (q1->unk_8c2 < 20)
+ if (queue->count < 20)
{
imeBak = REG_IME;
REG_IME = 0;
count = 0;
for (i = 0; i < 70; i += 14)
{
- if (q2[i] == 0 && q2[i + 1] == 0)
+ if (data[i] == 0 && data[i + 1] == 0)
{
count++;
}
@@ -242,36 +242,36 @@ void sub_80FC588(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2)
{
for (i = 0; i < 70; i++)
{
- q1->unk_00[q1->unk_8c0][i] = q2[i];
+ queue->slots[queue->recv_slot][i] = data[i];
}
- q1->unk_8c0++;
- q1->unk_8c0 %= 20;
- q1->unk_8c2++;
+ queue->recv_slot++;
+ queue->recv_slot %= 20;
+ queue->count++;
for (i = 0; i < 70; i++)
{
- q2[i] = 0;
+ data[i] = 0;
}
}
REG_IME = imeBak;
}
else
{
- q1->unk_8c3 = 1;
+ queue->full = 1;
}
}
-void sub_80FC63C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2)
+void RFU_queue_40_14_recv(struct UnkRfuStruct_2_Sub_9e8 *queue, u8 *data)
{
s32 i;
u16 imeBak;
- if (q1->unk_232 < 40)
+ if (queue->count < 40)
{
imeBak = REG_IME;
REG_IME = 0;
for (i = 0; i < 14; i++)
{
- if (q2[i] != 0)
+ if (data[i] != 0)
{
break;
}
@@ -280,57 +280,57 @@ void sub_80FC63C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2)
{
for (i = 0; i < 14; i++)
{
- q1->unk_00[q1->unk_230][i] = q2[i];
+ queue->slots[queue->recv_slot][i] = data[i];
}
- q1->unk_230++;
- q1->unk_230 %= 40;
- q1->unk_232++;
+ queue->recv_slot++;
+ queue->recv_slot %= 40;
+ queue->count++;
for (i = 0; i < 14; i++)
{
- q2[i] = 0;
+ data[i] = 0;
}
}
REG_IME = imeBak;
}
else
{
- q1->unk_233 = 1;
+ queue->full = 1;
}
}
-bool8 sub_80FC6E8(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2)
+bool8 RFU_queue_20_70_send(struct UnkRfuStruct_2_Sub_124 *queue, u8 *dest)
{
u16 imeBak;
s32 i;
imeBak = REG_IME;
REG_IME = 0;
- if (q1->unk_8c0 == q1->unk_8c1 || q1->unk_8c3 != 0)
+ if (queue->recv_slot == queue->send_slot || queue->full)
{
for (i = 0; i < 70; i++)
{
- q2[i] = 0;
+ dest[i] = 0;
}
REG_IME = imeBak;
return FALSE;
}
for (i = 0; i < 70; i++)
{
- q2[i] = q1->unk_00[q1->unk_8c1][i];
+ dest[i] = queue->slots[queue->send_slot][i];
}
- q1->unk_8c1++;
- q1->unk_8c1 %= 20;
- q1->unk_8c2--;
+ queue->send_slot++;
+ queue->send_slot %= 20;
+ queue->count--;
REG_IME = imeBak;
return TRUE;
}
-bool8 sub_80FC79C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2)
+bool8 RFU_queue_40_14_send(struct UnkRfuStruct_2_Sub_9e8 *queue, u8 *dest)
{
s32 i;
u16 imeBak;
- if (q1->unk_230 == q1->unk_231 || q1->unk_233 != 0)
+ if (queue->recv_slot == queue->send_slot || queue->full != 0)
{
return FALSE;
}
@@ -338,98 +338,98 @@ bool8 sub_80FC79C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2)
REG_IME = 0;
for (i = 0; i < 14; i++)
{
- q2[i] = q1->unk_00[q1->unk_231][i];
+ dest[i] = queue->slots[queue->send_slot][i];
}
- q1->unk_231++;
- q1->unk_231 %= 40;
- q1->unk_232--;
+ queue->send_slot++;
+ queue->send_slot %= 40;
+ queue->count--;
REG_IME = imeBak;
return TRUE;
}
-void sub_80FC828(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2)
+void RFU_queue_2_14_recv(struct UnkRfuStruct_2_Sub_c1c *queue, const u8 *data)
{
s32 i;
- if (q2[1] == 0)
+ if (data[1] == 0)
{
- sub_80FC888(q1, NULL);
+ RFU_queue_2_14_send(queue, NULL);
}
else
{
for (i = 0; i < 14; i++)
{
- q1->unk_00[q1->unk_1c][i] = q2[i];
+ queue->slots[queue->recv_slot][i] = data[i];
}
- q1->unk_1c++;
- q1->unk_1c %= 2;
- if (q1->unk_1e < 2)
+ queue->recv_slot++;
+ queue->recv_slot %= 2;
+ if (queue->count < 2)
{
- q1->unk_1e++;
+ queue->count++;
}
else
{
- q1->unk_1d = q1->unk_1c;
+ queue->send_slot = queue->recv_slot;
}
}
}
-bool8 sub_80FC888(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2)
+bool8 RFU_queue_2_14_send(struct UnkRfuStruct_2_Sub_c1c *queue, u8 *dest)
{
s32 i;
- if (q1->unk_1e == 0)
+ if (queue->count == 0)
{
return FALSE;
}
- if (q2 != NULL)
+ if (dest != NULL)
{
for (i = 0; i < 14; i++)
{
- q2[i] = q1->unk_00[q1->unk_1d][i];
+ dest[i] = queue->slots[queue->send_slot][i];
}
}
- q1->unk_1d++;
- q1->unk_1d %= 2;
- q1->unk_1e--;
+ queue->send_slot++;
+ queue->send_slot %= 2;
+ queue->count--;
return TRUE;
}
-static void sub_80FC8D8(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2)
+static void RFU_queue_2_256_recv(struct UnkRfuStruct_Sub_Unused *queue, u8 *data)
{
s32 i;
- if (q1->unk_202 < 2)
+ if (queue->count < 2)
{
for (i = 0; i < 256; i++)
{
- q1->unk_00[q1->unk_200][i] = q2[i];
+ queue->slots[queue->recv_slot][i] = data[i];
}
- q1->unk_200++;
- q1->unk_200 %= 2;
- q1->unk_202++;
+ queue->recv_slot++;
+ queue->recv_slot %= 2;
+ queue->count++;
}
else
{
- q1->unk_203 = 1;
+ queue->full = 1;
}
}
-static bool8 sub_80FC944(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2)
+static bool8 RFU_queue_2_256_send(struct UnkRfuStruct_Sub_Unused *queue, u8 *send)
{
s32 i;
- if (q1->unk_200 == q1->unk_201 || q1->unk_203)
+ if (queue->recv_slot == queue->send_slot || queue->full)
{
return FALSE;
}
for (i = 0; i < 256; i++)
{
- q2[i] = q1->unk_00[q1->unk_201][i];
+ send[i] = queue->slots[queue->send_slot][i];
}
- q1->unk_201++;
- q1->unk_201 %= 2;
- q1->unk_202--;
+ queue->send_slot++;
+ queue->send_slot %= 2;
+ queue->count--;
return TRUE;
}
@@ -438,7 +438,7 @@ static void sub_80FC9B8(u8 *q1, u8 mode)
s32 i;
u8 rval;
u16 r5 = 0;
- static u8 _3002018;
+ static u8 counter;
switch (mode)
{
@@ -470,11 +470,11 @@ static void sub_80FC9B8(u8 *q1, u8 mode)
case 3:
for (i = 0; i < 200; i++)
{
- q1[i] = i + 1 + _3002018;
- r5 += (i + 1 + _3002018) & 0xFF;
+ q1[i] = i + 1 + counter;
+ r5 += (i + 1 + counter) & 0xFF;
}
*((u16 *)(q1 + i)) = r5;
- _3002018++;
+ counter++;
break;
}
}
@@ -617,7 +617,7 @@ void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 r2, s32 r3
r3 >>= 8;
}
data->playerGender = gSaveBlock2Ptr->playerGender;
- data->unk_0a_0 = activity;
+ data->activity = activity;
data->unk_0a_7 = r2;
data->unk_00.unk_00_0 = GAME_LANGUAGE;
data->unk_00.unk_01_2 = GAME_VERSION;
@@ -629,14 +629,21 @@ void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 r2, s32 r3
data->unk_00.gameClear = FlagGet(FLAG_SYS_GAME_CLEAR);
}
+/*
+ * ==========================================================
+ * Returns 1 if parent, 0 if child or neutral.
+ * If partner serial number is valid, copies gname and uname.
+ * Otherwise, blanks these.
+ * ==========================================================
+ */
bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx)
{
bool8 retVal;
- if (gUnknown_3005E10.unk_06 == 1)
+ if (lman.parent_child == MODE_PARENT)
{
retVal = TRUE;
- if (sub_80FA44C(gRfuLinkStatus->partner[idx].serialNo) && ((gRfuLinkStatus->getNameFlag >> idx) & 1))
+ if (RfuSerialNumberIsValid(gRfuLinkStatus->partner[idx].serialNo) && ((gRfuLinkStatus->getNameFlag >> idx) & 1))
{
memcpy(gname, &gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH);
memcpy(uname, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH);
@@ -650,7 +657,7 @@ bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx)
else
{
retVal = FALSE;
- if (sub_80FA44C(gRfuLinkStatus->partner[idx].serialNo))
+ if (RfuSerialNumberIsValid(gRfuLinkStatus->partner[idx].serialNo))
{
memcpy(gname, &gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH);
memcpy(uname, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH);
@@ -664,6 +671,12 @@ bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx)
return retVal;
}
+/*
+ * ==========================================================
+ * Specific check for serial number 0x7F7D,
+ * which comes from ???
+ * ==========================================================
+ */
bool8 sub_80FCCF4(struct GFtgtGname *gname, u8 *uname, u8 idx)
{
bool8 retVal = FALSE;
@@ -879,7 +892,7 @@ void RecordMixTrainerNames(void)
s32 connectedTrainerRecordIndices[5];
struct TrainerNameRecord *newRecords = AllocZeroed(20 * sizeof(struct TrainerNameRecord));
- // Check if we already have a record saved for connected trainers.
+ // Check if we alsendy have a record saved for connected trainers.
for (i = 0; i < GetLinkPlayerCount(); i++)
{
connectedTrainerRecordIndices[i] = -1;
@@ -900,7 +913,7 @@ void RecordMixTrainerNames(void)
{
CopyTrainerRecord(&newRecords[nextSpace], (u16)gLinkPlayers[i].trainerId, gLinkPlayers[i].name);
- // If we already had a record for this trainer, wipe it so that the next step doesn't duplicate it.
+ // If we alsendy had a record for this trainer, wipe it so that the next step doesn't duplicate it.
if (connectedTrainerRecordIndices[i] >= 0)
{
ZeroName(gSaveBlock1Ptr->trainerNameRecords[connectedTrainerRecordIndices[i]].trainerName);
diff --git a/src/party_menu.c b/src/party_menu.c
index df0e70b37..c9a88f157 100644
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -3881,7 +3881,7 @@ static void CursorCB_Register(u8 taskId)
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE);
- switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)sub_80F9800(), species2, species, obedience))
+ switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), species2, species, obedience))
{
case CANT_REGISTER_MON:
StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow);
@@ -3907,7 +3907,7 @@ static void CursorCB_Trade1(u8 taskId)
u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2);
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE);
- u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)sub_80F9800(), gUnknown_203B064, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience);
+ u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), gUnknown_203B064, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience);
if (stringId != UR_TRADE_MSG_NONE)
{
diff --git a/src/rfu_union_tool.c b/src/rfu_union_tool.c
index 3811aa3e7..36b291057 100644
--- a/src/rfu_union_tool.c
+++ b/src/rfu_union_tool.c
@@ -17,7 +17,7 @@ static EWRAM_DATA u32 sUnionObjRefreshTimer = 0;
static u8 StartUnionObjAnimTask(void);
static u32 sub_811BBC8(u32 playerIdx, u32 arg1);
-static void sub_811C008(s32 arg0, s32 arg1, u8 arg2);
+static void UnionPartnerObjectSetFacing(s32 arg0, s32 arg1, u8 arg2);
static const u8 sUnionObjectEventGfxIds[][10] = {
[MALE] = {
@@ -70,11 +70,11 @@ static const u8 sOppositeFacingDirection[] = {
};
static const u8 gUnknown_845711B[] = {
- 1,
- 3,
- 1,
- 4,
- 2
+ [DIR_NONE] = DIR_SOUTH,
+ [DIR_SOUTH] = DIR_WEST,
+ [DIR_NORTH] = DIR_SOUTH,
+ [DIR_WEST] = DIR_EAST,
+ [DIR_EAST] = DIR_NORTH
};
static const u8 sUnionRoomLocalIds[] = {
@@ -467,19 +467,19 @@ void sub_811BB68(void)
}
}
-static u8 sub_811BBA0(u32 r1, u32 unused, struct GFtgtGname * r2)
+static u8 UnionPartnerObjectGetFacing(u32 r1, u32 unused, struct GFtgtGname * gname)
{
if (r1 != 0)
{
return gUnknown_845711B[r1];
}
- else if (r2->unk_0a_0 == 0x45)
+ else if (gname->activity == 0x45)
{
- return 1;
+ return DIR_SOUTH;
}
else
{
- return 4;
+ return DIR_EAST;
}
}
@@ -488,7 +488,7 @@ static u32 sub_811BBC8(u32 a0, u32 a1)
return RfuUnionObjectIsInvisible(5 * a0 + a1 - 0x38);
}
-static void sub_811BBE0(u32 r5, u32 r6, u8 r8, struct GFtgtGname * r9)
+static void sub_811BBE0(u32 r5, u32 r6, u8 r8, struct GFtgtGname * gname)
{
s32 x, y;
s32 r7 = 5 * r5 + r6;
@@ -498,7 +498,7 @@ static void sub_811BBE0(u32 r5, u32 r6, u8 r8, struct GFtgtGname * r9)
RfuUnionObjectStartWarp(r7 - 0x38, 1);
}
RfuUnionObjectSetFacingDirection(r7 - 0x38, r8);
- sub_811C008(r6, r5, sub_811BBA0(r6, r5, r9));
+ UnionPartnerObjectSetFacing(r6, r5, UnionPartnerObjectGetFacing(r6, r5, gname));
GetUnionRoomPlayerFacingCoords(r5, r6, &x, &y);
sub_8059024(x, y, 1);
}
@@ -542,7 +542,7 @@ static void sub_811BCA0(u32 r7, struct GFtgtGname * r8)
static void sub_811BDA8(u32 r5, struct GFtgtGname * r4)
{
u32 i;
- switch (r4->unk_0a_0)
+ switch (r4->activity)
{
case 0x40:
case 0x54:
@@ -567,7 +567,7 @@ static void sub_811BDA8(u32 r5, struct GFtgtGname * r4)
}
}
-static void sub_811BE6C(u32 r5, struct GFtgtGname * unused)
+static void sub_811BE6C(u32 r5, struct GFtgtGname * gname)
{
s32 i;
sub_811B90C(r5);
@@ -584,11 +584,11 @@ static void UpdateUnionRoomPlayerSprites(struct UnkStruct_URoom *r0)
sUnionObjRefreshTimer = 0;
for (i = 0, r4 = r0->field_0->arr; i < 8; i++)
{
- if (r4[i].field_1A_0 == 1)
+ if (r4[i].tradeStatus == 1)
{
sub_811BDA8(i, &r4[i].unk.gname);
}
- else if (r4[i].field_1A_0 == 2)
+ else if (r4[i].tradeStatus == 2)
{
sub_811BE6C(i, &r4[i].unk.gname);
}
@@ -639,11 +639,11 @@ bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3)
{
continue;
}
- if (r4[i].field_1A_0 != 1)
+ if (r4[i].tradeStatus != 1)
{
continue;
}
- sub_811C008(j, i, sOppositeFacingDirection[GetPlayerFacingDirection()]);
+ UnionPartnerObjectSetFacing(j, i, sOppositeFacingDirection[GetPlayerFacingDirection()]);
*arg1 = j;
*arg2 = i;
return TRUE;
@@ -652,12 +652,12 @@ bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3)
return FALSE;
}
-static void sub_811C008(s32 arg0, s32 arg1, u8 arg2)
+static void UnionPartnerObjectSetFacing(s32 arg0, s32 arg1, u8 arg2)
{
TurnObjectEvent(5 * arg1 - 0x38 + arg0, arg2);
}
void sub_811C028(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2)
{
- return sub_811C008(arg0, arg1, sub_811BBA0(arg0, arg1, &arg2->arr[arg1].unk.gname));
+ return UnionPartnerObjectSetFacing(arg0, arg1, UnionPartnerObjectGetFacing(arg0, arg1, &arg2->arr[arg1].unk.gname));
}
diff --git a/src/union_room.c b/src/union_room.c
index f942fb7d3..30f4d7d9b 100644
--- a/src/union_room.c
+++ b/src/union_room.c
@@ -65,7 +65,7 @@ static void sub_81161E4(struct UnkStruct_Leader * leader);
static bool8 sub_8116444(struct UnkStruct_Leader * leader, u32 a1, u32 a2);
static void sub_81164C8(u8 windowId, s32 itemId, u8 y);
static u8 sub_8116524(struct UnkStruct_Main0 * a0);
-static u8 sub_81165E8(struct UnkStruct_Main0 * a0);
+static u8 UnionRoomLeaderField0CompactionAndCount(struct UnkStruct_Main0 * a0);
static void sub_8116738(u8 taskId);
static u32 sub_8116D10(struct UnkStruct_Group * group, s32 id);
static void sub_8116D60(struct UnkStruct_Group * group, s32 id);
@@ -90,16 +90,16 @@ static u8 sub_811A084(struct UnkStruct_Main4 * arg0, u32 arg1);
static bool32 sub_811A0B4(const u8 * str);
static bool32 sub_811A0E0(void);
static bool8 PrintOnTextbox(u8 *textState, const u8 *str);
-static s8 sub_811A14C(u8 *dest, bool32 arg1);
-static s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate);
-static s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * arg6);
+static s8 sub_811A14C(u8 *state_p, bool32 no_draw);
+static s32 ListMenuHandler_AllItemsAvailable(u8 *state_p, u8 *win_id_p, u8 *list_menu_id_p, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate);
+static s32 TradeBoardMenuHandler(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * arg6);
static void sub_811A3F8(void);
static void sub_811A41C(void);
-static void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx);
-static void sub_811A5E4(struct UnkStruct_x20 * arg0, u8 count);
-static void sub_811A650(struct UnkStruct_x1C * arg0, u8 count);
-static bool8 sub_811A694(struct UnkStruct_Shared * arg0, const struct UnkStruct_Shared * arg1);
-static bool32 sub_811A6DC(struct UnkStruct_Shared * arg0, struct UnkStruct_Shared * arg1);
+static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx);
+static void BlankUnkStruct_x20Array(struct UnkStruct_x20 * arg0, u8 count);
+static void BlankUnkStruct_x1CArray(struct UnkStruct_x1C * arg0, u8 count);
+static bool8 AreUnkSharedObjectsDifferent(struct UnkStruct_Shared * arg0, const struct UnkStruct_Shared * arg1);
+static bool32 AreUnionRoomPlayerGnamesDifferent(struct UnkStruct_Shared * arg0, struct UnkStruct_Shared * arg1);
static u32 sub_811A748(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1);
static u8 sub_811A798(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1, u8 arg2);
static void sub_811A81C(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * arg3, u8 arg4, u8 id);
@@ -109,10 +109,10 @@ static u32 sub_811A9FC(s32 a0);
static u32 sub_811AA24(struct UnkStruct_x20 * unkX20);
static s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 playerGender);
static void nullsub_92(u8 windowId, s32 itemId, u8 y);
-static void sub_811ACA4(u8 windowId, s32 itemId, u8 y);
-static s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1);
+static void TradeBoardListMenuItemPrintFunc(u8 windowId, s32 itemId, u8 y);
+static s32 GetIndexOfNthTradeBoardOffer(struct UnkStruct_x20 * arg, s32 arg1);
static s32 GetUnionRoomPlayerGender(s32 a0, struct UnkStruct_Main0 * a1);
-static s32 sub_811ADD0(u32 type, u32 species);
+static s32 IsRequestedTypeAndSpeciesInPlayerParty(u32 type, u32 species);
static void sub_811AE68(u8 *dst, s32 arg1, u32 playerGender);
static void sub_811AECC(u8 *dst, u8 arg1);
static s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom * arg3);
@@ -414,7 +414,7 @@ static const struct ListMenuTemplate gUnknown_8456F04 = {
.cursorKind = 0
};
-static const struct WindowTemplate gUnknown_8456F1C = {
+static const struct WindowTemplate sTradeBoardWindowTemplate = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 1,
@@ -434,7 +434,7 @@ static const struct WindowTemplate gUnknown_8456F24 = {
.baseBlock = 0x039
};
-static const struct ListMenuItem gUnknown_8456F2C[] = {
+static const struct ListMenuItem sTradeBoardListMenuItems[] = {
{gUnknown_84571AC, -3},
{gUnknown_84571AC, 0},
{gUnknown_84571AC, 1},
@@ -447,10 +447,10 @@ static const struct ListMenuItem gUnknown_8456F2C[] = {
{gUnknown_8459368, 8}
};
-static const struct ListMenuTemplate gUnknown_8456F7C = {
- .items = gUnknown_8456F2C,
+static const struct ListMenuTemplate sTradeBoardListMenuTemplate = {
+ .items = sTradeBoardListMenuItems,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
- .itemPrintFunc = sub_811ACA4,
+ .itemPrintFunc = TradeBoardListMenuItemPrintFunc,
.totalItems = 10,
.maxShowed = 5,
.windowId = 0,
@@ -518,7 +518,7 @@ static const struct ListMenuTemplate gUnknown_845701C = {
.cursorKind = 0
};
-static const struct UnkStruct_Shared gUnknown_8457034 = {};
+static const struct UnkStruct_Shared sUnkStruct_Shared_Dummy = {};
// starts at gUnknown_082F0474 in pokeemerald, union link groups
@@ -584,16 +584,16 @@ static void sub_811586C(u8 windowId, u8 arg1, u8 stringId)
switch (arg1 << 8)
{
case 0x200:
- sub_811A444(windowId, 2, gUnknown_845742C[0][stringId - 1], 0, 2, 0);
+ UR_AddTextPrinterParameterized(windowId, 2, gUnknown_845742C[0][stringId - 1], 0, 2, 0);
break;
case 0x400:
- sub_811A444(windowId, 2, gUnknown_845742C[1][stringId - 1], 0, 2, 0);
+ UR_AddTextPrinterParameterized(windowId, 2, gUnknown_845742C[1][stringId - 1], 0, 2, 0);
break;
case 0x2500:
- sub_811A444(windowId, 2, gUnknown_845742C[2][stringId - 1], 0, 2, 0);
+ UR_AddTextPrinterParameterized(windowId, 2, gUnknown_845742C[2][stringId - 1], 0, 2, 0);
break;
case 0x3500:
- sub_811A444(windowId, 2, gUnknown_845742C[3][stringId - 1], 0, 2, 0);
+ UR_AddTextPrinterParameterized(windowId, 2, gUnknown_845742C[3][stringId - 1], 0, 2, 0);
break;
}
@@ -605,11 +605,11 @@ static void sub_8115924(u8 windowId)
u8 text[12];
u8 text2[12];
- sub_811A444(windowId, 2, gSaveBlock2Ptr->playerName, 0, 2, 0);
+ UR_AddTextPrinterParameterized(windowId, 2, gSaveBlock2Ptr->playerName, 0, 2, 0);
StringCopy(text2, gUnknown_84571B4);
ConvertIntToDecimalStringN(text, ReadAsU16(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5);
StringAppend(text2, text);
- sub_811A444(windowId, 0, text2, 0, 0x10, 0);
+ UR_AddTextPrinterParameterized(windowId, 0, text2, 0, 0x10, 0);
}
static void sub_811599C(u8 *dst, u8 caseId)
@@ -659,11 +659,11 @@ static void sub_8115A68(u8 taskId)
data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
data->field_0 = AllocZeroed(5 * sizeof(struct UnkStruct_x20));
data->field_8 = AllocZeroed(5 * sizeof(struct UnkStruct_x20));
- sub_811A650(data->field_4->arr, 4);
- sub_811A5E4(data->field_0->arr, 5);
+ BlankUnkStruct_x1CArray(data->field_4->arr, 4);
+ BlankUnkStruct_x20Array(data->field_0->arr, 5);
LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].unk.gname, data->field_0->arr[0].unk.playerName);
data->field_0->arr[0].field_18 = 0;
- data->field_0->arr[0].field_1A_0 = 1;
+ data->field_0->arr[0].tradeStatus = 1;
data->field_0->arr[0].field_1A_1 = 0;
data->field_0->arr[0].field_1B = 0;
data->field_17 = sub_811A054(data->field_4, 0xFF);
@@ -672,7 +672,7 @@ static void sub_8115A68(u8 taskId)
data->field_11 = AddWindow(&gUnknown_8456D04);
FillWindowPixelBuffer(data->field_10, PIXEL_FILL(2));
- sub_811A444(data->field_10, 0, gUnknown_845747C, 8, 2, 4);
+ UR_AddTextPrinterParameterized(data->field_10, 0, gUnknown_845747C, 8, 2, 4);
PutWindowTilemap(data->field_10);
CopyWindowToVram(data->field_10, 2);
@@ -686,14 +686,14 @@ static void sub_8115A68(u8 taskId)
CopyWindowToVram(data->field_11, 2);
CopyBgTilemapBufferToVram(0);
- data->field_13 = 1;
+ data->playerCount = 1;
data->state = 4;
break;
case 4:
StringCopy(gStringVar1, gUnknown_8456C74[gUnknown_203B058]);
if ((gUnknown_203B059 >> 4) != 0)
{
- if (data->field_13 > (gUnknown_203B059 >> 4) - 1 && (gUnknown_203B059 & 0xF) != 0)
+ if (data->playerCount > (gUnknown_203B059 >> 4) - 1 && (gUnknown_203B059 & 0xF) != 0)
StringExpandPlaceholders(gStringVar4, gUnknown_8457264);
else
StringExpandPlaceholders(gStringVar4, gUnknown_8457234);
@@ -703,7 +703,7 @@ static void sub_8115A68(u8 taskId)
sub_811599C(gStringVar4, gUnknown_203B058);
}
- sub_811586C(data->field_11, gUnknown_203B059, data->field_13);
+ sub_811586C(data->field_11, gUnknown_203B059, data->playerCount);
data->state = 5;
break;
case 5:
@@ -714,7 +714,7 @@ static void sub_8115A68(u8 taskId)
sub_8116444(data, 7, 10);
if (JOY_NEW(B_BUTTON))
{
- if (data->field_13 == 1)
+ if (data->playerCount == 1)
data->state = 23;
else if ((gUnknown_203B059 & 0xF0) != 0)
data->state = 30;
@@ -722,7 +722,7 @@ static void sub_8115A68(u8 taskId)
data->state = 19;
}
if ((gUnknown_203B059 >> 4) != 0
- && data->field_13 > (gUnknown_203B059 >> 4) - 1
+ && data->playerCount > (gUnknown_203B059 >> 4) - 1
&& (gUnknown_203B059 & 0xF) != 0
&& sub_80FC1CC()
&& JOY_NEW(START_BUTTON))
@@ -739,14 +739,14 @@ static void sub_8115A68(u8 taskId)
if (!sub_80FA5D4())
{
data->state = 6;
- data->field_13 = sub_81165E8(data->field_0);
+ data->playerCount = UnionRoomLeaderField0CompactionAndCount(data->field_0);
}
break;
case 10:
id = ((gUnknown_203B058 & 0xF) == 2) ? 1 : 0;
if (PrintOnTextbox(&data->textState, gUnknown_845767C[id]))
{
- data->field_13 = sub_81165E8(data->field_0);
+ data->playerCount = UnionRoomLeaderField0CompactionAndCount(data->field_0);
RedrawListMenu(data->listTaskId);
data->state = 4;
}
@@ -765,19 +765,19 @@ static void sub_8115A68(u8 taskId)
}
break;
case 11:
- switch (sub_811A14C(&data->textState, sub_80FA634(ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName)))
+ switch (sub_811A14C(&data->textState, sub_80FA634(ReadAsU16(data->field_0->arr[data->playerCount].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].unk.playerName)))
{
case 0:
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
data->field_19 = 5;
- sub_80FA670(5, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ sub_80FA670(5, ReadAsU16(data->field_0->arr[data->playerCount].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].unk.playerName);
data->state = 12;
break;
case 1:
case -1:
data->field_19 = 6;
- sub_80FA670(6, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ sub_80FA670(6, ReadAsU16(data->field_0->arr[data->playerCount].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].unk.playerName);
data->state = 12;
break;
case -3:
@@ -786,29 +786,29 @@ static void sub_8115A68(u8 taskId)
}
break;
case 12:
- val = sub_80FA6FC(ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ val = sub_80FA6FC(ReadAsU16(data->field_0->arr[data->playerCount].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].unk.playerName);
if (val == 1)
{
if (data->field_19 == 5)
{
- data->field_0->arr[data->field_13].field_1B = 0;
+ data->field_0->arr[data->playerCount].field_1B = 0;
RedrawListMenu(data->listTaskId);
- data->field_13++;
- if (data->field_13 == (gUnknown_203B059 & 0xF))
+ data->playerCount++;
+ if (data->playerCount == (gUnknown_203B059 & 0xF))
{
- if ((gUnknown_203B059 & 0xF0) != 0 || data->field_13 == 4)
+ if ((gUnknown_203B059 & 0xF0) != 0 || data->playerCount == 4)
{
data->state = 15;
}
else
{
- IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->field_13 - 1]);
+ IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->playerCount - 1]);
StringExpandPlaceholders(gStringVar4, gUnknown_8457554);
data->state = 13;
}
sub_80F8F5C();
- sub_811586C(data->field_11, gUnknown_203B059, data->field_13);
+ sub_811586C(data->field_11, gUnknown_203B059, data->playerCount);
}
else
{
@@ -817,9 +817,9 @@ static void sub_8115A68(u8 taskId)
}
else
{
- sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId));
- data->field_0->arr[data->field_13].field_1A_0 = 0;
- sub_81165E8(data->field_0);
+ sub_80FBD4C(data->field_0->arr[data->playerCount].unk.playerName, ReadAsU16(data->field_0->arr[data->playerCount].unk.gname.unk_00.playerTrainerId));
+ data->field_0->arr[data->playerCount].tradeStatus = 0;
+ UnionRoomLeaderField0CompactionAndCount(data->field_0);
RedrawListMenu(data->listTaskId);
data->state = 4;
}
@@ -873,7 +873,7 @@ static void sub_8115A68(u8 taskId)
case -1:
if ((gUnknown_203B059 & 0xF0) != 0)
data->state = 15;
- else if (data->field_13 == (gUnknown_203B059 & 0xF))
+ else if (data->playerCount == (gUnknown_203B059 & 0xF))
data->state = 15;
else
data->state = 4;
@@ -1040,7 +1040,7 @@ static bool8 sub_8116444(struct UnkStruct_Leader * data, u32 arg1, u32 arg2)
case 1:
PlaySE(SE_PC_LOGIN);
RedrawListMenu(data->listTaskId);
- IntlConvPartnerUname7(gStringVar2, data->field_0->arr[data->field_13]);
+ IntlConvPartnerUname7(gStringVar2, data->field_0->arr[data->playerCount]);
sub_8116244(gStringVar4, gUnknown_203B058);
data->state = arg1;
break;
@@ -1059,7 +1059,7 @@ static void sub_81164C8(u8 windowId, s32 itemId, u8 y)
struct UnkStruct_Leader * data = sUnionRoomMain.leader;
u8 var = 0;
- switch (data->field_0->arr[itemId].field_1A_0)
+ switch (data->field_0->arr[itemId].tradeStatus)
{
case 1:
if (data->field_0->arr[itemId].field_1B != 0)
@@ -1082,7 +1082,7 @@ static u8 sub_8116524(struct UnkStruct_Main0 * arg0)
for (i = 1; i < 5; i++)
{
- u16 var = data->field_0->arr[i].field_1A_0;
+ u16 var = data->field_0->arr[i].tradeStatus;
if (var == 1)
{
id = sub_811A748(&data->field_0->arr[i], data->field_4->arr);
@@ -1093,7 +1093,7 @@ static u8 sub_8116524(struct UnkStruct_Main0 * arg0)
}
else
{
- data->field_0->arr[i].field_1A_0 = 2;
+ data->field_0->arr[i].tradeStatus = 2;
ret = 2;
}
}
@@ -1114,7 +1114,7 @@ static u8 sub_8116524(struct UnkStruct_Main0 * arg0)
return ret;
}
-static u8 sub_81165E8(struct UnkStruct_Main0 * arg0)
+static u8 UnionRoomLeaderField0CompactionAndCount(struct UnkStruct_Main0 * arg0)
{
struct UnkStruct_Leader * data = sUnionRoomMain.leader;
u8 copiedCount;
@@ -1127,7 +1127,7 @@ static u8 sub_81165E8(struct UnkStruct_Main0 * arg0)
copiedCount = 0;
for (i = 0; i < 5; i++)
{
- if (data->field_8->arr[i].field_1A_0 == 1)
+ if (data->field_8->arr[i].tradeStatus == 1)
{
data->field_0->arr[copiedCount] = data->field_8->arr[i];
copiedCount++;
@@ -1137,16 +1137,16 @@ static u8 sub_81165E8(struct UnkStruct_Main0 * arg0)
ret = copiedCount;
for (; copiedCount < 5; copiedCount++)
{
- data->field_0->arr[copiedCount].unk = gUnknown_8457034;
+ data->field_0->arr[copiedCount].unk = sUnkStruct_Shared_Dummy;
data->field_0->arr[copiedCount].field_18 = 0;
- data->field_0->arr[copiedCount].field_1A_0 = 0;
+ data->field_0->arr[copiedCount].tradeStatus = 0;
data->field_0->arr[copiedCount].field_1A_1 = 0;
data->field_0->arr[copiedCount].field_1B = 0;
}
for (i = 0; i < 5; i++)
{
- if (data->field_0->arr[i].field_1A_0 != 1)
+ if (data->field_0->arr[i].tradeStatus != 1)
continue;
if (data->field_0->arr[i].field_1B != 0x40)
continue;
@@ -1194,15 +1194,15 @@ static void sub_8116738(u8 taskId)
data->state = 2;
break;
case 2:
- sub_811A650(data->field_4->arr, 4);
- sub_811A5E4(data->field_0->arr, 16);
+ BlankUnkStruct_x1CArray(data->field_4->arr, 4);
+ BlankUnkStruct_x20Array(data->field_0->arr, 16);
data->field_11 = sub_811A054(data->field_4, gSpecialVar_0x8004);
data->field_C = AddWindow(&gUnknown_8456CD0);
data->listWindowId = AddWindow(&gUnknown_8456D4C);
data->field_D = AddWindow(&gUnknown_8456D54);
FillWindowPixelBuffer(data->field_C, PIXEL_FILL(2));
- sub_811A444(data->field_C, 0, gUnknown_8458FC8, 8, 2, 4);
+ UR_AddTextPrinterParameterized(data->field_C, 0, gUnknown_8458FC8, 8, 2, 4);
PutWindowTilemap(data->field_C);
CopyWindowToVram(data->field_C, 2);
@@ -1234,9 +1234,9 @@ static void sub_8116738(u8 taskId)
{
// this unused variable along with the assignment is needed to match
u32 unusedVar;
- unusedVar = data->field_0->arr[id].unk.gname.unk_0a_0;
+ unusedVar = data->field_0->arr[id].unk.gname.activity;
- if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.gname.unk_0a_7)
+ if (data->field_0->arr[id].tradeStatus == 1 && !data->field_0->arr[id].unk.gname.unk_0a_7)
{
u32 var = sub_8116D10(data, id);
if (var == 0)
@@ -1278,7 +1278,7 @@ static void sub_8116738(u8 taskId)
case 6:
if (gReceivedRemoteLinkPlayers != 0)
{
- gUnknown_203B058 = data->field_0->arr[data->field_F].unk.gname.unk_0a_0;
+ gUnknown_203B058 = data->field_0->arr[data->field_F].unk.gname.activity;
sub_80FB9E4(0, 0);
switch (gUnknown_203B058)
{
@@ -1478,8 +1478,8 @@ static void sub_8116E1C(u8 taskId)
data->state = 2;
break;
case 2:
- sub_811A650(data->field_4->arr, 4);
- sub_811A5E4(data->field_0->arr, 16);
+ BlankUnkStruct_x1CArray(data->field_4->arr, 4);
+ BlankUnkStruct_x20Array(data->field_0->arr, 16);
data->field_11 = sub_811A054(data->field_4, 0xFF);
data->field_F = 0;
data->state = 3;
@@ -1526,7 +1526,7 @@ static bool32 sub_8116F28(u32 arg0, u32 id)
static u8 sub_8116F5C(struct UnkStruct_Group * data, u32 id)
{
- if (data->field_0->arr[id].field_1A_0 == 1)
+ if (data->field_0->arr[id].tradeStatus == 1)
{
if (data->field_0->arr[id].unk.gname.unk_0a_7)
return 3;
@@ -1556,14 +1556,14 @@ static u8 sub_8116FE4(void)
for (i = 0; i < 16; i++)
{
- if (data->field_0->arr[i].field_1A_0 != 0)
+ if (data->field_0->arr[i].tradeStatus != 0)
{
id = sub_811A748(&data->field_0->arr[i], data->field_4->arr);
if (id != 0xFF)
{
- if (data->field_0->arr[i].field_1A_0 == 1)
+ if (data->field_0->arr[i].tradeStatus == 1)
{
- if (sub_811A6DC(&data->field_0->arr[i].unk, &data->field_4->arr[id].unk0))
+ if (AreUnionRoomPlayerGnamesDifferent(&data->field_0->arr[i].unk, &data->field_4->arr[id].unk0))
{
data->field_0->arr[i].unk = data->field_4->arr[id].unk0;
data->field_0->arr[i].field_1B = 0x40;
@@ -1581,7 +1581,7 @@ static u8 sub_8116FE4(void)
}
else
{
- data->field_0->arr[i].field_1A_0 = 1;
+ data->field_0->arr[i].tradeStatus = 1;
data->field_0->arr[i].field_1B = 0x40;
ret = 1;
}
@@ -1590,12 +1590,12 @@ static u8 sub_8116FE4(void)
}
else
{
- if (data->field_0->arr[i].field_1A_0 != 2)
+ if (data->field_0->arr[i].tradeStatus != 2)
{
data->field_0->arr[i].field_18++;
if (data->field_0->arr[i].field_18 >= 300)
{
- data->field_0->arr[i].field_1A_0 = 2;
+ data->field_0->arr[i].tradeStatus = 2;
ret = 2;
}
}
@@ -1961,11 +1961,11 @@ static void sub_8117A0C(u8 taskId)
data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
data->field_0 = AllocZeroed(5 * sizeof(struct UnkStruct_x20));
data->field_8 = AllocZeroed(5 * sizeof(struct UnkStruct_x20));
- sub_811A650(data->field_4->arr, 4);
- sub_811A5E4(data->field_0->arr, 5);
+ BlankUnkStruct_x1CArray(data->field_4->arr, 4);
+ BlankUnkStruct_x20Array(data->field_0->arr, 5);
LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].unk.gname, data->field_0->arr[0].unk.playerName);
data->field_0->arr[0].field_18 = 0;
- data->field_0->arr[0].field_1A_0 = 1;
+ data->field_0->arr[0].tradeStatus = 1;
data->field_0->arr[0].field_1A_1 = 0;
data->field_0->arr[0].field_1B = 0;
data->field_17 = sub_811A054(data->field_4, 0xFF);
@@ -1979,7 +1979,7 @@ static void sub_8117A0C(u8 taskId)
data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
CopyBgTilemapBufferToVram(0);
- data->field_13 = 1;
+ data->playerCount = 1;
data->state = 2;
break;
case 2:
@@ -2002,7 +2002,7 @@ static void sub_8117A0C(u8 taskId)
case 6:
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_84577F8))
{
- data->field_13 = sub_81165E8(data->field_0);
+ data->playerCount = UnionRoomLeaderField0CompactionAndCount(data->field_0);
RedrawListMenu(data->listTaskId);
data->state = 2;
}
@@ -2016,39 +2016,39 @@ static void sub_8117A0C(u8 taskId)
case 0:
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
- data->field_0->arr[data->field_13].field_1B = 0;
+ data->field_0->arr[data->playerCount].field_1B = 0;
RedrawListMenu(data->listTaskId);
data->field_19 = 5;
- sub_80FA670(5, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ sub_80FA670(5, ReadAsU16(data->field_0->arr[data->playerCount].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].unk.playerName);
data->state = 8;
break;
case 1:
case -1:
data->field_19 = 6;
- sub_80FA670(6, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ sub_80FA670(6, ReadAsU16(data->field_0->arr[data->playerCount].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].unk.playerName);
data->state = 8;
break;
}
break;
case 8:
- val = sub_80FA6FC(ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ val = sub_80FA6FC(ReadAsU16(data->field_0->arr[data->playerCount].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].unk.playerName);
if (val == 1)
{
if (data->field_19 == 5)
{
- data->field_0->arr[data->field_13].field_1B = 0;
+ data->field_0->arr[data->playerCount].field_1B = 0;
RedrawListMenu(data->listTaskId);
- data->field_13++;
- IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->field_13 - 1]);
+ data->playerCount++;
+ IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->playerCount - 1]);
StringExpandPlaceholders(gStringVar4, gUnknown_8457554);
data->state = 9;
sub_80F8F5C();
}
else
{
- sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId));
- data->field_0->arr[data->field_13].field_1A_0 = 0;
- sub_81165E8(data->field_0);
+ sub_80FBD4C(data->field_0->arr[data->playerCount].unk.playerName, ReadAsU16(data->field_0->arr[data->playerCount].unk.gname.unk_00.playerTrainerId));
+ data->field_0->arr[data->playerCount].tradeStatus = 0;
+ UnionRoomLeaderField0CompactionAndCount(data->field_0);
RedrawListMenu(data->listTaskId);
data->state = 2;
}
@@ -2169,8 +2169,8 @@ static void sub_8117F20(u8 taskId)
data->state = 2;
break;
case 2:
- sub_811A650(data->field_4->arr, 4);
- sub_811A5E4(data->field_0->arr, 16);
+ BlankUnkStruct_x1CArray(data->field_4->arr, 4);
+ BlankUnkStruct_x20Array(data->field_0->arr, 16);
data->field_11 = sub_811A054(data->field_4, data->field_12 + 7);
winTemplate1 = gUnknown_8456D4C;
@@ -2209,9 +2209,9 @@ static void sub_8117F20(u8 taskId)
{
// this unused variable along with the assignment is needed to match
u32 unusedVar;
- unusedVar = data->field_0->arr[id].unk.gname.unk_0a_0;
+ unusedVar = data->field_0->arr[id].unk.gname.activity;
- if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.gname.unk_0a_7)
+ if (data->field_0->arr[id].tradeStatus == 1 && !data->field_0->arr[id].unk.gname.unk_0a_7)
{
data->field_F = id;
LoadWirelessStatusIndicatorSpriteGfx();
@@ -2242,7 +2242,7 @@ static void sub_8117F20(u8 taskId)
case 5:
if (gReceivedRemoteLinkPlayers != 0)
{
- gUnknown_203B058 = data->field_0->arr[data->field_F].unk.gname.unk_0a_0;
+ gUnknown_203B058 = data->field_0->arr[data->field_F].unk.gname.activity;
data->state = 10;
}
@@ -2335,8 +2335,8 @@ static void sub_81182DC(u8 taskId)
data->state = 2;
break;
case 2:
- sub_811A650(data->field_4->arr, 4);
- sub_811A5E4(data->field_0->arr, 16);
+ BlankUnkStruct_x1CArray(data->field_4->arr, 4);
+ BlankUnkStruct_x20Array(data->field_0->arr, 16);
data->field_11 = sub_811A084(data->field_4, data->field_12 + 7);
if (data->field_13 != 0)
@@ -2371,7 +2371,7 @@ static void sub_81182DC(u8 taskId)
id = ListMenu_ProcessInput(data->listTaskId);
if (data->field_14 > 120)
{
- if (data->field_0->arr[0].field_1A_0 == 1 && !data->field_0->arr[0].unk.gname.unk_0a_7)
+ if (data->field_0->arr[0].tradeStatus == 1 && !data->field_0->arr[0].unk.gname.unk_0a_7)
{
if (sub_8119FB0(&data->field_0->arr[0].unk.gname, data->field_12 + 7))
{
@@ -2407,7 +2407,7 @@ static void sub_81182DC(u8 taskId)
case 5:
if (gReceivedRemoteLinkPlayers != 0)
{
- gUnknown_203B058 = data->field_0->arr[data->field_F].unk.gname.unk_0a_0;
+ gUnknown_203B058 = data->field_0->arr[data->field_F].unk.gname.activity;
data->state = 12;
}
@@ -2549,7 +2549,7 @@ static void sub_81186E0(u8 taskId)
data->field_C = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
data->field_0 = AllocZeroed(8 * sizeof(struct UnkStruct_x20));
data->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20));
- sub_811A5E4(data->field_0->arr, 8);
+ BlankUnkStruct_x20Array(data->field_0->arr, 8);
gUnknown_203B058 = 0x40;
data->field_20 = sub_8119E84(data->field_C, data->field_4, 9);
ZeroUnionObjWork(data->unionObjs);
@@ -2567,9 +2567,9 @@ static void sub_81186E0(u8 taskId)
sub_800B1F4();
OpenLink();
sub_80FBC00();
- sub_811A5E4(&data->field_8->arr[0], 1);
- sub_811A650(data->field_4->arr, 4);
- sub_811A650(data->field_C->arr, 4);
+ BlankUnkStruct_x20Array(&data->field_8->arr[0], 1);
+ BlankUnkStruct_x1CArray(data->field_4->arr, 4);
+ BlankUnkStruct_x1CArray(data->field_C->arr, 4);
gSpecialVar_Result = 0;
data->state = 3;
break;
@@ -2760,7 +2760,7 @@ static void sub_81186E0(u8 taskId)
sub_8118664(6, gUnknown_8457B04[id][playerGender]);
break;
case 6:
- var5 = sub_811A218(&data->textState, &data->field_1B, &data->field_1C, &gUnknown_8456DF4, &gUnknown_8456E1C);
+ var5 = ListMenuHandler_AllItemsAvailable(&data->textState, &data->field_1B, &data->field_1C, &gUnknown_8456DF4, &gUnknown_8456E1C);
if (var5 != -1)
{
if (gReceivedRemoteLinkPlayers == 0)
@@ -3089,20 +3089,20 @@ static void sub_81186E0(u8 taskId)
}
break;
case 42:
- if (sub_80F9800()->species == SPECIES_NONE)
+ if (GetHostRFUtgtGname()->species == SPECIES_NONE)
{
data->state = 43;
}
else
{
- if (sub_80F9800()->species == SPECIES_EGG)
+ if (GetHostRFUtgtGname()->species == SPECIES_EGG)
{
StringCopy(gStringVar4, gUnknown_8458DE8);
}
else
{
- StringCopy(gStringVar1, gSpeciesNames[sub_80F9800()->species]);
- ConvertIntToDecimalStringN(gStringVar2, sub_80F9800()->level, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringCopy(gStringVar1, gSpeciesNames[GetHostRFUtgtGname()->species]);
+ ConvertIntToDecimalStringN(gStringVar2, GetHostRFUtgtGname()->level, STR_CONV_MODE_LEFT_ALIGN, 3);
StringExpandPlaceholders(gStringVar4, gUnknown_8458DBC);
}
sub_8118664(44, gStringVar4);
@@ -3113,7 +3113,7 @@ static void sub_81186E0(u8 taskId)
data->state = 47;
break;
case 47:
- var5 = sub_811A218(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_8456E34, &gUnknown_8456E54);
+ var5 = ListMenuHandler_AllItemsAvailable(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_8456E34, &gUnknown_8456E54);
if (var5 != -1)
{
if (var5 == -2 || var5 == 3)
@@ -3149,7 +3149,7 @@ static void sub_81186E0(u8 taskId)
}
break;
case 52:
- var5 = sub_811A218(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_8456E6C, &gUnknown_8456F04);
+ var5 = ListMenuHandler_AllItemsAvailable(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_8456E6C, &gUnknown_8456F04);
if (var5 != -1)
{
switch (var5)
@@ -3202,7 +3202,7 @@ static void sub_81186E0(u8 taskId)
data->state = 48;
break;
case 48:
- var5 = sub_811A2EC(&data->textState, &data->field_1D, &data->field_4A, &data->field_1E, &gUnknown_8456F24, &gUnknown_8456F7C, data->field_0);
+ var5 = TradeBoardMenuHandler(&data->textState, &data->field_1D, &data->field_4A, &data->field_1E, &gUnknown_8456F24, &sTradeBoardListMenuTemplate, data->field_0);
if (var5 != -1)
{
switch (var5)
@@ -3214,19 +3214,19 @@ static void sub_81186E0(u8 taskId)
data->state = 4;
break;
default:
- switch (sub_811ADD0(data->field_0->arr[var5].unk.gname.type, data->field_0->arr[var5].unk.gname.species))
+ switch (IsRequestedTypeAndSpeciesInPlayerParty(data->field_0->arr[var5].unk.gname.type, data->field_0->arr[var5].unk.gname.species))
{
- case 0:
+ case UR_TRADE_MATCH:
IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]);
sub_8118664(49, gUnknown_8458E70);
taskData[1] = var5;
break;
- case 1:
+ case UR_TRADE_NOTYPE:
IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]);
StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.gname.type]);
sub_8118664(46, gUnknown_8458ED0);
break;
- case 2:
+ case UR_TRADE_NOEGG:
IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]);
StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.gname.type]);
sub_8118664(46, gUnknown_8458F04);
@@ -3368,13 +3368,13 @@ static void sub_81199FC(u8 taskId)
break;
case 2:
structPtr->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
- sub_811A650(structPtr->field_4->arr, 4);
+ BlankUnkStruct_x1CArray(structPtr->field_4->arr, 4);
structPtr->field_C = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
- sub_811A650(structPtr->field_C->arr, 4);
+ BlankUnkStruct_x1CArray(structPtr->field_C->arr, 4);
structPtr->field_0 = AllocZeroed(8 * sizeof(struct UnkStruct_x20));
- sub_811A5E4(structPtr->field_0->arr, 8);
+ BlankUnkStruct_x20Array(structPtr->field_0->arr, 8);
structPtr->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20));
- sub_811A5E4(&structPtr->field_8->arr[0], 1);
+ BlankUnkStruct_x20Array(&structPtr->field_8->arr[0], 1);
structPtr->field_20 = sub_8119E84(structPtr->field_C, structPtr->field_4, 10);
structPtr->state = 3;
break;
@@ -3387,7 +3387,7 @@ static void sub_81199FC(u8 taskId)
{
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
{
- if (structPtr->field_0->arr[i].field_1A_0 == 1)
+ if (structPtr->field_0->arr[i].tradeStatus == 1)
{
IntlConvPartnerUname(text, structPtr->field_0->arr[i]);
if (PlayerHasMetTrainerBefore(ReadAsU16(structPtr->field_0->arr[i].unk.gname.unk_00.playerTrainerId), text))
@@ -3439,25 +3439,25 @@ static u8 sub_8119B94(void)
for (i = 0; i < 4; i++)
{
- if (sub_811A694(&structPtr->field_C->arr[i].unk0, &gUnknown_8457034) == TRUE)
+ if (AreUnkSharedObjectsDifferent(&structPtr->field_C->arr[i].unk0, &sUnkStruct_Shared_Dummy) == TRUE)
{
structPtr->field_8->arr[0].unk = structPtr->field_C->arr[i].unk0;
structPtr->field_8->arr[0].field_18 = 0;
- structPtr->field_8->arr[0].field_1A_0 = 1;
+ structPtr->field_8->arr[0].tradeStatus = 1;
structPtr->field_8->arr[0].field_1B = 1;
return 4;
}
}
for (j = 0; j < 8; j++)
{
- if (structPtr->field_0->arr[j].field_1A_0 != 0)
+ if (structPtr->field_0->arr[j].tradeStatus != 0)
{
i = sub_811A748(&structPtr->field_0->arr[j], &structPtr->field_4->arr[0]);
if (i != 0xFF)
{
- if (structPtr->field_0->arr[j].field_1A_0 == 1)
+ if (structPtr->field_0->arr[j].tradeStatus == 1)
{
- if (sub_811A6DC(&structPtr->field_0->arr[j].unk, &structPtr->field_4->arr[i].unk0))
+ if (AreUnionRoomPlayerGnamesDifferent(&structPtr->field_0->arr[j].unk, &structPtr->field_4->arr[i].unk0))
{
structPtr->field_0->arr[j].unk = structPtr->field_4->arr[i].unk0;
structPtr->field_0->arr[j].field_1B = 0x40;
@@ -3472,27 +3472,27 @@ static u8 sub_8119B94(void)
}
else
{
- structPtr->field_0->arr[j].field_1A_0 = 1;
+ structPtr->field_0->arr[j].tradeStatus = 1;
structPtr->field_0->arr[j].field_1B = 0;
r7 = 2;
}
structPtr->field_0->arr[j].field_18 = 0;
}
- else if (structPtr->field_0->arr[j].field_1A_0 != 2)
+ else if (structPtr->field_0->arr[j].tradeStatus != 2)
{
structPtr->field_0->arr[j].field_18++;
if (structPtr->field_0->arr[j].field_18 >= 600)
{
- structPtr->field_0->arr[j].field_1A_0 = 2;
+ structPtr->field_0->arr[j].tradeStatus = 2;
r7 = 2;
}
}
- else if (structPtr->field_0->arr[j].field_1A_0 == 2)
+ else if (structPtr->field_0->arr[j].tradeStatus == 2)
{
structPtr->field_0->arr[j].field_18++;
if (structPtr->field_0->arr[j].field_18 >= 900)
{
- sub_811A5E4(&structPtr->field_0->arr[j], 1);
+ BlankUnkStruct_x20Array(&structPtr->field_0->arr[j], 1);
}
}
}
@@ -3511,35 +3511,35 @@ static void sub_8119D34(u8 taskId)
s32 i, j;
struct UnkStruct_Shared sp0;
struct UnkStruct_Main4 ** ptr = (void*) gTasks[taskId].data;
- bool8 r4;
+ bool8 parent_child;
for (i = 0; i < 4; i++)
{
- r4 = sub_80FCC3C(&sp0.gname, sp0.playerName, i);
- if (!sub_8116F28(sp0.gname.unk_0a_0, gTasks[taskId].data[4]))
+ parent_child = sub_80FCC3C(&sp0.gname, sp0.playerName, i);
+ if (!sub_8116F28(sp0.gname.activity, gTasks[taskId].data[4]))
{
- sp0 = gUnknown_8457034;
+ sp0 = sUnkStruct_Shared_Dummy;
}
if (sp0.gname.unk_00.unk_00_0 == 1)
{
- sp0 = gUnknown_8457034;
+ sp0 = sUnkStruct_Shared_Dummy;
}
- if (!r4)
+ if (!parent_child)
{
for (j = 0; j < i; j++)
{
- if (!sub_811A694(&ptr[1]->arr[j].unk0, &sp0))
+ if (!AreUnkSharedObjectsDifferent(&ptr[1]->arr[j].unk0, &sp0))
{
- sp0 = gUnknown_8457034;
+ sp0 = sUnkStruct_Shared_Dummy;
}
}
ptr[1]->arr[i].unk0 = sp0;
- ptr[1]->arr[i].unk18 = sub_811A694(&ptr[1]->arr[i].unk0, &gUnknown_8457034);
+ ptr[1]->arr[i].unk18 = AreUnkSharedObjectsDifferent(&ptr[1]->arr[i].unk0, &sUnkStruct_Shared_Dummy);
}
else
{
ptr[0]->arr[i].unk0 = sp0;
- ptr[0]->arr[i].unk18 = sub_811A694(&ptr[0]->arr[i].unk0, &gUnknown_8457034);
+ ptr[0]->arr[i].unk18 = AreUnkSharedObjectsDifferent(&ptr[0]->arr[i].unk0, &sUnkStruct_Shared_Dummy);
}
}
}
@@ -3562,18 +3562,18 @@ static void sub_8119EB8(u8 taskId)
for (i = 0; i < 4; i++)
{
sub_80FCC3C(&ptr[0]->arr[i].unk0.gname, ptr[0]->arr[i].unk0.playerName, i);
- if (!sub_8116F28(ptr[0]->arr[i].unk0.gname.unk_0a_0, gTasks[taskId].data[2]))
+ if (!sub_8116F28(ptr[0]->arr[i].unk0.gname.activity, gTasks[taskId].data[2]))
{
- ptr[0]->arr[i].unk0 = gUnknown_8457034;
+ ptr[0]->arr[i].unk0 = sUnkStruct_Shared_Dummy;
}
for (j = 0; j < i; j++)
{
- if (!sub_811A694(&ptr[0]->arr[j].unk0, &ptr[0]->arr[i].unk0))
+ if (!AreUnkSharedObjectsDifferent(&ptr[0]->arr[j].unk0, &ptr[0]->arr[i].unk0))
{
- ptr[0]->arr[i].unk0 = gUnknown_8457034;
+ ptr[0]->arr[i].unk0 = sUnkStruct_Shared_Dummy;
}
}
- ptr[0]->arr[i].unk18 = sub_811A694(&ptr[0]->arr[i].unk0, &gUnknown_8457034);
+ ptr[0]->arr[i].unk18 = AreUnkSharedObjectsDifferent(&ptr[0]->arr[i].unk0, &sUnkStruct_Shared_Dummy);
}
}
@@ -3618,7 +3618,7 @@ static void sub_8119FD8(u8 taskId)
{
sub_8119FB0(&ptr[0]->arr[i].unk0.gname, gTasks[taskId].data[2]);
}
- ptr[0]->arr[i].unk18 = sub_811A694(&ptr[0]->arr[i].unk0, &gUnknown_8457034);
+ ptr[0]->arr[i].unk18 = AreUnkSharedObjectsDifferent(&ptr[0]->arr[i].unk0, &sUnkStruct_Shared_Dummy);
}
}
@@ -3683,31 +3683,31 @@ static bool8 PrintOnTextbox(u8 *textState, const u8 *str)
return FALSE;
}
-static s8 sub_811A14C(u8 *arg0, bool32 arg1)
+static s8 sub_811A14C(u8 *state_p, bool32 no_draw)
{
s8 r1;
- switch (*arg0)
+ switch (*state_p)
{
case 0:
- if (arg1)
+ if (no_draw)
{
return -3;
}
DisplayYesNoMenuDefaultYes();
- (*arg0)++;
+ (*state_p)++;
break;
case 1:
- if (arg1)
+ if (no_draw)
{
DestroyYesNoMenu();
- *arg0 = 0;
+ *state_p = 0;
return -3;
}
r1 = Menu_ProcessInputNoWrapClearOnChoose();
if (r1 == -1 || r1 == 0 || r1 == 1)
{
- *arg0 = 0;
+ *state_p = 0;
return r1;
}
break;
@@ -3715,54 +3715,54 @@ static s8 sub_811A14C(u8 *arg0, bool32 arg1)
return -2;
}
-static u8 sub_811A1AC(const struct WindowTemplate * template)
+static u8 CreateTradeBoardWindow(const struct WindowTemplate * template)
{
u8 windowId = AddWindow(template);
DrawStdWindowFrame(windowId, FALSE);
FillWindowPixelBuffer(windowId, PIXEL_FILL(15));
- sub_811A444(windowId, 0, gUnknown_8459378, 8, 1, 6);
+ UR_AddTextPrinterParameterized(windowId, 0, gUnknown_8459378, 8, 1, 6);
PutWindowTilemap(windowId);
CopyWindowToVram(windowId, 2);
return windowId;
}
-static void sub_811A1FC(u8 windowId)
+static void DeleteTradeBoardWindow(u8 windowId)
{
ClearStdWindowAndFrame(windowId, TRUE);
RemoveWindow(windowId);
}
-static s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate)
+static s32 ListMenuHandler_AllItemsAvailable(u8 *state_p, u8 *win_id_p, u8 *list_menu_id_p, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate)
{
- s32 r1, r8;
+ s32 input;
- switch (*arg0)
+ switch (*state_p)
{
case 0:
- *arg1 = AddWindow(winTemplate);
- DrawStdWindowFrame(*arg1, FALSE);
+ *win_id_p = AddWindow(winTemplate);
+ DrawStdWindowFrame(*win_id_p, FALSE);
gMultiuseListMenuTemplate = *menuTemplate;
- gMultiuseListMenuTemplate.windowId = *arg1;
- *arg2 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
- CopyWindowToVram(*arg1, TRUE);
- (*arg0)++;
+ gMultiuseListMenuTemplate.windowId = *win_id_p;
+ *list_menu_id_p = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+ CopyWindowToVram(*win_id_p, TRUE);
+ (*state_p)++;
break;
case 1:
- r8 = ListMenu_ProcessInput(*arg2);
+ input = ListMenu_ProcessInput(*list_menu_id_p);
if (JOY_NEW(A_BUTTON))
{
- DestroyListMenuTask(*arg2, NULL, NULL);
- ClearStdWindowAndFrame(*arg1, TRUE);
- RemoveWindow(*arg1);
- *arg0 = 0;
- return r8;
+ DestroyListMenuTask(*list_menu_id_p, NULL, NULL);
+ ClearStdWindowAndFrame(*win_id_p, TRUE);
+ RemoveWindow(*win_id_p);
+ *state_p = 0;
+ return input;
}
else if (JOY_NEW(B_BUTTON))
{
- DestroyListMenuTask(*arg2, NULL, NULL);
- ClearStdWindowAndFrame(*arg1, TRUE);
- RemoveWindow(*arg1);
- *arg0 = 0;
+ DestroyListMenuTask(*list_menu_id_p, NULL, NULL);
+ ClearStdWindowAndFrame(*win_id_p, TRUE);
+ RemoveWindow(*win_id_p);
+ *state_p = 0;
return -2;
}
break;
@@ -3771,46 +3771,46 @@ static s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate
return -1;
}
-static s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * arg6)
+static s32 TradeBoardMenuHandler(u8 *state_p, u8 *win_id_p, u8 *list_menu_id_p, u8 *trade_board_win_id_p, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * traders)
{
s32 input;
s32 r4;
- switch (*arg0)
+ switch (*state_p)
{
case 0:
- *arg3 = sub_811A1AC(&gUnknown_8456F1C);
- *arg1 = AddWindow(winTemplate);
- DrawStdWindowFrame(*arg1, FALSE);
+ *trade_board_win_id_p = CreateTradeBoardWindow(&sTradeBoardWindowTemplate);
+ *win_id_p = AddWindow(winTemplate);
+ DrawStdWindowFrame(*win_id_p, FALSE);
gMultiuseListMenuTemplate = *menuTemplate;
- gMultiuseListMenuTemplate.windowId = *arg1;
- *arg2 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 1);
- CopyWindowToVram(*arg1, TRUE);
- (*arg0)++;
+ gMultiuseListMenuTemplate.windowId = *win_id_p;
+ *list_menu_id_p = ListMenuInit(&gMultiuseListMenuTemplate, 0, 1);
+ CopyWindowToVram(*win_id_p, TRUE);
+ (*state_p)++;
break;
case 1:
- input = ListMenu_ProcessInput(*arg2);
+ input = ListMenu_ProcessInput(*list_menu_id_p);
if (JOY_NEW(A_BUTTON | B_BUTTON))
{
if (input == 8 || JOY_NEW(B_BUTTON))
{
- DestroyListMenuTask(*arg2, NULL, NULL);
- ClearStdWindowAndFrame(*arg1, TRUE);
- RemoveWindow(*arg1);
- sub_811A1FC(*arg3);
- *arg0 = 0;
+ DestroyListMenuTask(*list_menu_id_p, NULL, NULL);
+ ClearStdWindowAndFrame(*win_id_p, TRUE);
+ RemoveWindow(*win_id_p);
+ DeleteTradeBoardWindow(*trade_board_win_id_p);
+ *state_p = 0;
return -2;
}
else
{
- r4 = sub_811AD7C(arg6->arr, input);
+ r4 = GetIndexOfNthTradeBoardOffer(traders->arr, input);
if (r4 >= 0)
{
- DestroyListMenuTask(*arg2, NULL, NULL);
- ClearStdWindowAndFrame(*arg1, TRUE);
- RemoveWindow(*arg1);
- sub_811A1FC(*arg3);
- *arg0 = 0;
+ DestroyListMenuTask(*list_menu_id_p, NULL, NULL);
+ ClearStdWindowAndFrame(*win_id_p, TRUE);
+ RemoveWindow(*win_id_p);
+ DeleteTradeBoardWindow(*trade_board_win_id_p);
+ *state_p = 0;
return r4;
}
else
@@ -3838,7 +3838,7 @@ static void sub_811A41C(void)
EnableBothScriptContexts();
}
-static void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx)
+static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx)
{
struct TextPrinterTemplate printerTemplate;
@@ -3908,32 +3908,32 @@ static void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 co
AddTextPrinter(&printerTemplate, 0xFF, NULL);
}
-static void sub_811A5E4(struct UnkStruct_x20 * arg0, u8 count)
+static void BlankUnkStruct_x20Array(struct UnkStruct_x20 * arg0, u8 count)
{
s32 i;
for (i = 0; i < count; i++)
{
- arg0[i].unk = gUnknown_8457034;
+ arg0[i].unk = sUnkStruct_Shared_Dummy;
arg0[i].field_18 = 0xFF;
- arg0[i].field_1A_0 = 0;
+ arg0[i].tradeStatus = 0;
arg0[i].field_1A_1 = 0;
arg0[i].field_1B = 0;
}
}
-static void sub_811A650(struct UnkStruct_x1C * arg0, u8 count)
+static void BlankUnkStruct_x1CArray(struct UnkStruct_x1C * arg0, u8 count)
{
s32 i;
for (i = 0; i < 4; i++)
{
- arg0[i].unk0 = gUnknown_8457034;
- arg0[i].unk18 = 0;
+ arg0[i].unk0 = sUnkStruct_Shared_Dummy;
+ arg0[i].unk18 = FALSE;
}
}
-static bool8 sub_811A694(struct UnkStruct_Shared * arg0, const struct UnkStruct_Shared * arg1)
+static bool8 AreUnkSharedObjectsDifferent(struct UnkStruct_Shared * arg0, const struct UnkStruct_Shared * arg1)
{
s32 i;
@@ -3956,11 +3956,11 @@ static bool8 sub_811A694(struct UnkStruct_Shared * arg0, const struct UnkStruct_
return FALSE;
}
-static bool32 sub_811A6DC(struct UnkStruct_Shared * arg0, struct UnkStruct_Shared * arg1)
+static bool32 AreUnionRoomPlayerGnamesDifferent(struct UnkStruct_Shared * arg0, struct UnkStruct_Shared * arg1)
{
s32 i;
- if (arg0->gname.unk_0a_0 != arg1->gname.unk_0a_0)
+ if (arg0->gname.activity != arg1->gname.activity)
{
return TRUE;
}
@@ -3998,7 +3998,7 @@ static u32 sub_811A748(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1)
for (i = 0; i < 4; i++)
{
- if (arg1[i].unk18 && !sub_811A694(&arg0->unk, &arg1[i].unk0))
+ if (arg1[i].unk18 && !AreUnkSharedObjectsDifferent(&arg0->unk, &arg1[i].unk0))
{
result = i;
arg1[i].unk18 = FALSE;
@@ -4016,11 +4016,11 @@ static u8 sub_811A798(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1,
{
for (i = 0; i < arg2; i++)
{
- if (arg0[i].field_1A_0 == 0)
+ if (arg0[i].tradeStatus == 0)
{
arg0[i].unk = arg1->unk0;
arg0[i].field_18 = 0;
- arg0[i].field_1A_0 = 1;
+ arg0[i].tradeStatus = 1;
arg0[i].field_1B = 64;
arg1->unk18 = FALSE;
return i;
@@ -4039,18 +4039,18 @@ static void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 * arg3,
ConvertIntToDecimalStringN(gStringVar4, id + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
StringAppend(gStringVar4, gUnknown_84571B0);
- sub_811A444(arg0, 0, gStringVar4, arg1, arg2, 0);
+ UR_AddTextPrinterParameterized(arg0, 0, gStringVar4, arg1, arg2, 0);
arg1 += 18;
- r2 = arg3->unk.gname.unk_0a_0;
- if (arg3->field_1A_0 == 1 && !(r2 & 0x40))
+ r2 = arg3->unk.gname.activity;
+ if (arg3->tradeStatus == 1 && !(r2 & 0x40))
{
IntlConvPartnerUname(sp10, *arg3);
- sub_811A444(arg0, 2, sp10, arg1, arg2, arg4);
+ UR_AddTextPrinterParameterized(arg0, 2, sp10, arg1, arg2, arg4);
ConvertIntToDecimalStringN(sp0, arg3->unk.gname.unk_00.playerTrainerId[0] | (arg3->unk.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5);
StringCopy(gStringVar4, gUnknown_84571B4);
StringAppend(gStringVar4, sp0);
arg1 += 77;
- sub_811A444(arg0, 0, gStringVar4, arg1, arg2, arg4);
+ UR_AddTextPrinterParameterized(arg0, 0, gStringVar4, arg1, arg2, arg4);
}
}
@@ -4059,15 +4059,15 @@ static void sub_811A910(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * arg3, u8
u8 sp0[6];
u8 sp10[30];
- if (arg3->field_1A_0 == 1)
+ if (arg3->tradeStatus == 1)
{
IntlConvPartnerUname(sp10, *arg3);
- sub_811A444(windowId, 2, sp10, x, y, arg4);
+ UR_AddTextPrinterParameterized(windowId, 2, sp10, x, y, arg4);
ConvertIntToDecimalStringN(sp0, arg3->unk.gname.unk_00.playerTrainerId[0] | (arg3->unk.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5);
StringCopy(gStringVar4, gUnknown_84571B4);
StringAppend(gStringVar4, sp0);
x += 71;
- sub_811A444(windowId, 0, gStringVar4, x, y, arg4);
+ UR_AddTextPrinterParameterized(windowId, 0, gStringVar4, x, y, arg4);
}
}
@@ -4124,7 +4124,7 @@ static s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 play
{
IntlConvPartnerUname(gStringVar1, *r5);
r2 = PlayerHasMetTrainerBefore(ReadAsU16(r5->unk.gname.unk_00.playerTrainerId), gStringVar1);
- if (r5->unk.gname.unk_0a_0 == 0x45)
+ if (r5->unk.gname.activity == 0x45)
{
StringExpandPlaceholders(gStringVar4, gUnknown_8457F80[r2][playerGender]);
return 2;
@@ -4142,7 +4142,7 @@ static s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 play
{
playerGender = (r5->unk.gname.unk_00.playerTrainerId[arg1 + 1] >> 3) & 1;
}
- switch (r5->unk.gname.unk_0a_0 & 0x3F)
+ switch (r5->unk.gname.activity & 0x3F)
{
case 1:
StringExpandPlaceholders(gStringVar4, gUnknown_8458758[playerGender][Random() % 4]);
@@ -4169,40 +4169,40 @@ static void nullsub_92(u8 windowId, s32 itemId, u8 y)
}
-static void sub_811ABE4(u8 windowId, u8 y, struct GFtgtGname * gname, const u8 * uname, u8 colorIdx)
+static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct GFtgtGname * gname, const u8 * uname, u8 colorIdx)
{
u8 level_t[4];
u16 species = gname->species;
u8 type = gname->type;
u8 level = gname->level;
- sub_811A444(windowId, 2, uname, 8, y, colorIdx);
+ UR_AddTextPrinterParameterized(windowId, 2, uname, 8, y, colorIdx);
if (species == SPECIES_EGG)
{
- sub_811A444(windowId, 2, gUnknown_8458FBC, 0x44, y, colorIdx);
+ UR_AddTextPrinterParameterized(windowId, 2, gUnknown_8458FBC, 0x44, y, colorIdx);
}
else
{
BlitMoveInfoIcon(windowId, type + 1, 0x44, y);
- sub_811A444(windowId, 2, gSpeciesNames[species], 0x76, y, colorIdx);
+ UR_AddTextPrinterParameterized(windowId, 2, gSpeciesNames[species], 0x76, y, colorIdx);
ConvertIntToDecimalStringN(level_t, level, STR_CONV_MODE_LEFT_ALIGN, 3);
- sub_811A444(windowId, 2, level_t, GetStringRightAlignXOffset(2, level_t, 218), y, colorIdx);
+ UR_AddTextPrinterParameterized(windowId, 2, level_t, GetStringRightAlignXOffset(2, level_t, 218), y, colorIdx);
}
}
-static void sub_811ACA4(u8 windowId, s32 itemId, u8 y)
+static void TradeBoardListMenuItemPrintFunc(u8 windowId, s32 itemId, u8 y)
{
struct UnkStruct_Leader * leader = sUnionRoomMain.leader;
struct GFtgtGname * rfu;
s32 i, j;
u8 uname[8];
- if (itemId == -3 && y == gUnknown_8456F7C.upText_Y)
+ if (itemId == -3 && y == sTradeBoardListMenuTemplate.upText_Y)
{
- rfu = sub_80F9800();
+ rfu = GetHostRFUtgtGname();
if (rfu->species != SPECIES_NONE)
{
- sub_811ABE4(windowId, y, rfu, gSaveBlock2Ptr->playerName, 5);
+ TradeBoardPrintItemInfo(windowId, y, rfu, gSaveBlock2Ptr->playerName, 5);
}
}
else
@@ -4210,28 +4210,28 @@ static void sub_811ACA4(u8 windowId, s32 itemId, u8 y)
j = 0;
for (i = 0; i < 8; i++)
{
- if (leader->field_0->arr[i].field_1A_0 == 1 && leader->field_0->arr[i].unk.gname.species != SPECIES_NONE)
+ if (leader->field_0->arr[i].tradeStatus == 1 && leader->field_0->arr[i].unk.gname.species != SPECIES_NONE)
{
j++;
}
if (j == itemId + 1)
{
IntlConvPartnerUname(uname, leader->field_0->arr[i]);
- sub_811ABE4(windowId, y, &leader->field_0->arr[i].unk.gname, uname, 6);
+ TradeBoardPrintItemInfo(windowId, y, &leader->field_0->arr[i].unk.gname, uname, 6);
break;
}
}
}
}
-static s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1)
+static s32 GetIndexOfNthTradeBoardOffer(struct UnkStruct_x20 * arg, s32 arg1)
{
s32 i;
s32 j = 0;
for (i = 0; i < 8; i++)
{
- if (arg[i].field_1A_0 == 1 && arg[i].unk.gname.species != SPECIES_NONE)
+ if (arg[i].tradeStatus == 1 && arg[i].unk.gname.species != SPECIES_NONE)
{
j++;
}
@@ -4249,7 +4249,7 @@ static s32 GetUnionRoomPlayerGender(s32 arg1, struct UnkStruct_Main0 * arg0)
return arg0->arr[arg1].unk.gname.playerGender;
}
-static s32 sub_811ADD0(u32 type, u32 species)
+static s32 IsRequestedTypeAndSpeciesInPlayerParty(u32 type, u32 species)
{
s32 i;
@@ -4260,10 +4260,10 @@ static s32 sub_811ADD0(u32 type, u32 species)
species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
if (species == SPECIES_EGG)
{
- return 0;
+ return UR_TRADE_MATCH;
}
}
- return 2;
+ return UR_TRADE_NOEGG;
}
else
{
@@ -4272,10 +4272,10 @@ static s32 sub_811ADD0(u32 type, u32 species)
species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
if (gBaseStats[species].type1 == type || gBaseStats[species].type2 == type)
{
- return 0;
+ return UR_TRADE_MATCH;
}
}
- return 1;
+ return UR_TRADE_NOTYPE;
}
}
diff --git a/src/union_room_chat.c b/src/union_room_chat.c
index 15601c028..fb5860ef8 100644
--- a/src/union_room_chat.c
+++ b/src/union_room_chat.c
@@ -207,7 +207,7 @@ void EnterUnionRoomChat(void)
sWork = Alloc(sizeof(struct UnionRoomChat));
InitChatWork(sWork);
gKeyRepeatStartDelay = 20;
- sub_812B4AC();
+ HelpSystem_DisableToggleWithRButton();
SetVBlankCallback(NULL);
SetMainCallback2(CB2_LoadInterface);
}
@@ -893,7 +893,7 @@ static void ChatEntryRoutine_SaveAndExit(void)
case 13:
if (!gPaletteFade.active)
{
- sub_812B4B8();
+ HelpSystem_EnableToggleWithRButton();
UnionRoomChat_FreeGraphicsWork();
FreeChatWork();
SetMainCallback2(CB2_ReturnToField);
@@ -914,7 +914,7 @@ static bool32 TypeChatMessage_HandleDPad(void)
{
if (JOY_REPT(DPAD_UP))
{
- if (sWork->currentRow)
+ if (sWork->currentRow > 0)
sWork->currentRow--;
else
sWork->currentRow = sKeyboardPageMaxRow[sWork->currentPage];
@@ -938,7 +938,7 @@ static bool32 TypeChatMessage_HandleDPad(void)
{
if (JOY_REPT(DPAD_LEFT))
{
- if (sWork->currentCol)
+ if (sWork->currentCol > 0)
sWork->currentCol--;
else
sWork->currentCol = 4;
diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c
index 9be2823aa..919ea1e93 100644
--- a/src/wireless_communication_status_screen.c
+++ b/src/wireless_communication_status_screen.c
@@ -364,12 +364,12 @@ void sub_814F65C(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 palIdx)
u32 sub_814F714(struct UnkStruct_x20 * unk20, u32 * arg1)
{
- u32 r8 = unk20->unk.gname.unk_0a_0;
+ u32 r8 = unk20->unk.gname.activity;
s32 i, j, k;
for (i = 0; i < NELEMS(gUnknown_846FAC0); i++)
{
- if (r8 == gUnknown_846FAC0[i][0] && unk20->field_1A_0 == 1)
+ if (r8 == gUnknown_846FAC0[i][0] && unk20->tradeStatus == 1)
{
if (gUnknown_846FAC0[i][2] == 0)
{