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.c271
-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.c10
-rw-r--r--src/union_room.c470
-rw-r--r--src/union_room_chat.c8
-rw-r--r--src/wireless_communication_status_screen.c4
14 files changed, 2250 insertions, 1811 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..4016ee7e3 100644
--- a/src/librfu_rfu.c
+++ b/src/librfu_rfu.c
@@ -29,27 +29,27 @@ struct RfuLocalStruct
u16 unk06;
};
-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);
@@ -91,7 +91,7 @@ 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;
@@ -109,21 +109,21 @@ u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc
// 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);
+ r3 = RFU_API_BUFF_SIZE_RAM;
if (buffByteSize < r3)
return ERR_RFU_API_BUFF_SIZE;
}
if (!copyInterruptToRam)
{
- r3 = 0x504; // same issue as above
+ r3 = RFU_API_BUFF_SIZE_ROM; // same issue as above
if (buffByteSize < r3)
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];
@@ -180,20 +180,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 +205,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,23 +229,23 @@ 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;
u8 i;
- if (r0 == 0xFF)
+ if (reqCommand == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ)
{
if (gRfuStatic->flags & 8)
- gRfuFixed->reqCallback(r0, reqResult);
+ gRfuFixed->reqCallback(reqCommand, reqResult);
r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
for (i = 0; i < RFU_CHILD_MAX; ++i)
if ((r5 >> i) & 1)
@@ -305,14 +305,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,16 +326,16 @@ 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)
@@ -357,11 +357,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)
@@ -384,18 +384,18 @@ void rfu_REQ_configSystem(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer)
void rfu_REQ_configGameData(u8 mbootFlag, u16 serialNo, const u8 *gname, const u8 *uname)
{
- u8 sp[16];
+ u8 packet[16];
u8 i;
u8 r3;
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++;
+ packet[i] = *gname++;
r3 = 0;
unameBackup = uname;
for (i = 0; i < 8; ++i)
@@ -403,11 +403,11 @@ void rfu_REQ_configGameData(u8 mbootFlag, u16 serialNo, const u8 *gname, const u
r3 += *unameBackup++;
r3 += *gnameBackup++;
}
- sp[15] = ~r3;
+ packet[15] = ~r3;
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)
@@ -451,29 +451,29 @@ void rfu_REQ_startSearchChild(void)
if (r1 == 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, r1);
}
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 +498,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,13 +512,13 @@ 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)
@@ -555,7 +555,7 @@ static void rfu_STC_readChildList(void)
if (gRfuStatic->lsFixedCount[r2] >= 4)
{
gRfuStatic->lsFixedCount[r2] = 0;
- gRfuLinkStatus->strength[r2] = 0xFF;
+ gRfuLinkStatus->strength[r2] = 255;
gRfuLinkStatus->connSlotFlag |= 1 << r2;
++gRfuLinkStatus->connCount;
gRfuLinkStatus->partner[r2].id = *(u16 *)r4;
@@ -575,11 +575,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 +588,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)
@@ -665,7 +665,7 @@ void rfu_REQ_startConnectParent(u16 pid)
}
else
{
- rfu_STC_REQ_callback(31, r3);
+ rfu_STC_REQ_callback(ID_CP_START_REQ, r3);
}
}
@@ -797,13 +797,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;
-
+
*bmLinkLossSlot = 0;
*linkLossReason = REASON_DISCONNECTED;
*parentBmLinkRecoverySlot = 0;
@@ -814,21 +814,21 @@ 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];
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;
@@ -843,15 +843,15 @@ 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];
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];
for (i = 0; i < RFU_CHILD_MAX; ++i)
@@ -861,15 +861,15 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
}
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)
+ if (reqResult == 0)
{
- if (sp08 == 1 && (gRfuLinkStatus->connSlotFlag & r6))
+ if (reasonMaybe == 1 && (gRfuLinkStatus->connSlotFlag & r6))
{
if (gRfuLinkStatus->strength[i] == 0)
{
@@ -879,7 +879,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
if (gRfuStatic->linkEmergencyFlag[i] > 3)
{
*bmLinkLossSlot |= r6;
- *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS?
+ *linkLossReason = reasonMaybe; // why not directly use REASON_LINK_LOSS?
}
}
else
@@ -890,7 +890,7 @@ 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?
+ *linkLossReason = reasonMaybe; // why not directly use REASON_LINK_LOSS?
}
else
{
@@ -900,7 +900,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
STWI_send_DisconnectREQ(gRfuLinkStatus->connSlotFlag);
STWI_poll_CommandEnd();
*bmLinkLossSlot |= r6;
- *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS?
+ *linkLossReason = reasonMaybe; // why not directly use REASON_LINK_LOSS?
}
}
}
@@ -908,7 +908,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
}
else
{
- gRfuStatic->linkEmergencyFlag[i] = sp0C; // why not directly use 0?
+ gRfuStatic->linkEmergencyFlag[i] = reqResult; // why not directly use 0?
}
}
if (gRfuLinkStatus->parentChild == MODE_PARENT && gRfuLinkStatus->strength[i] != 0)
@@ -968,23 +968,23 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
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;
}
}
@@ -1005,7 +1005,7 @@ void rfu_REQ_disconnect(u8 bmDisconnectSlot)
STWI_send_SC_EndREQ(),
(r1 = STWI_poll_CommandEnd()) != 0))
{
- rfu_STC_REQ_callback(27, r1);
+ rfu_STC_REQ_callback(ID_SC_END_REQ, r1);
}
else
{
@@ -1015,20 +1015,20 @@ 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;
- 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)
{
@@ -1039,14 +1039,14 @@ static void rfu_CB_disconnect(u8 r6, u16 r5)
}
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,12 +1068,12 @@ 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;
- 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)
@@ -1090,7 +1090,7 @@ static void rfu_CB_CHILD_pollConnectRecovery(u8 r8, u16 r7)
}
gRfuStatic->recoveryBmSlot = 0;
}
- rfu_STC_REQ_callback(r8, r7);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
u16 rfu_CHILD_getConnectRecoveryStatus(u8 *status)
@@ -1127,14 +1127,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 +1144,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;
}
}
@@ -1593,12 +1593,12 @@ 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;
- if (r7 == 0)
+ if (reqResult == 0)
{
for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6)
{
@@ -1616,20 +1616,20 @@ static void rfu_CB_sendData(UNUSED u8 r0, u16 r7)
}
}
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)
@@ -1784,13 +1784,13 @@ 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;
- 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)
@@ -1811,20 +1811,20 @@ static void rfu_CB_recvData(u8 r9, u16 r7)
}
}
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 sp[RFU_CHILD_MAX];
u8 *r6;
r3 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] >> 8;
- for (r5 = 0; r5 < NELEMS(sp); ++r5)
+ for (r5 = 0; r5 < RFU_CHILD_MAX; ++r5)
{
sp[r5] = r3 & 0x1F;
r3 >>= 5;
@@ -1832,7 +1832,7 @@ static void rfu_STC_PARENT_analyzeRecvPacket(void)
gRfuStatic->NIEndRecvFlag |= 1 << r5;
}
r6 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8];
- for (r5 = 0; r5 < NELEMS(sp); ++r5)
+ for (r5 = 0; r5 < RFU_CHILD_MAX; ++r5)
{
if (sp[r5])
{
@@ -2035,6 +2035,7 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct
}
}
_081E30AE:
+ ;
}
else if (r12->state == SLOT_STATE_SEND_LAST)
{
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 20b29de9b..6c4f0c8cb 100644
--- a/src/rfu_union_tool.c
+++ b/src/rfu_union_tool.c
@@ -473,7 +473,7 @@ static u8 sub_811BBA0(u32 r1, u32 unused, struct GFtgtGname * r2)
{
return gUnknown_845711B[r1];
}
- else if (r2->unk_0a_0 == 0x45)
+ else if (r2->activity == 0x45)
{
return 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:
@@ -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,7 +639,7 @@ 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;
}
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)
{