More doccing of linkManager

This commit is contained in:
PikalaxALT
2020-01-29 16:10:52 -05:00
parent 1cc9d0eea9
commit 664fa0130a
8 changed files with 495 additions and 492 deletions
+2 -12
View File
@@ -473,16 +473,6 @@ struct RfuSIO32Id
u16 unkA; u16 unkA;
}; };
struct RfuAPIBuffer
{
struct RfuLinkStatus linkStatus;
struct RfuStatic static_;
struct RfuFixed fixed;
struct RfuSlotStatusNI NI[RFU_CHILD_MAX];
struct RfuSlotStatusUNI UNI[RFU_CHILD_MAX];
struct RfuIntrStruct intr;
};
extern struct STWIStatus *gSTWIStatus; extern struct STWIStatus *gSTWIStatus;
extern struct RfuLinkStatus *gRfuLinkStatus; extern struct RfuLinkStatus *gRfuLinkStatus;
extern struct RfuStatic *gRfuStatic; extern struct RfuStatic *gRfuStatic;
@@ -499,7 +489,7 @@ s32 AgbRFU_checkID(u8);
// librfu_rfu // librfu_rfu
// API Initialization and Initial Settings // API Initialization and Initial Settings
// API Initialization // API Initialization
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);
// Set Timer Interrupt // Set Timer Interrupt
void rfu_setTimerInterrupt(u8 timerNo, IntrFunc *timerIntrTable_p); void rfu_setTimerInterrupt(u8 timerNo, IntrFunc *timerIntrTable_p);
// Resident Function called from within a V-Blank Interrupt // Resident Function called from within a V-Blank Interrupt
@@ -600,7 +590,7 @@ u16 rfu_MBOOT_CHILD_inheritanceLinkStatus(void);
// For Debug // For Debug
// Obtain address of the SWTI-layer receive buffer // Obtain address of the SWTI-layer receive buffer
struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void); u8 *rfu_getSTWIRecvBuffer(void);
// Obtain RFU state // Obtain RFU state
void rfu_REQ_RFUStatus(void); void rfu_REQ_RFUStatus(void);
u16 rfu_getRFUStatus(u8 *rfuState); u16 rfu_getRFUStatus(u8 *rfuState);
+28 -26
View File
@@ -259,18 +259,17 @@ struct UnkRfuStruct_Sub_Unused
/* 0x203 */ vu8 unk_203; /* 0x203 */ vu8 unk_203;
}; };
struct UnkRfuStruct_2 typedef struct UnkRfuStruct_2
{ {
/* 0x000 */ void (*RfuFunc)(void); /* 0x000 */ void (*RfuFunc)(void);
/* 0x004 */ u16 unk_04; /* 0x004 */ u16 unk_04;
/* 0x006 */ u8 filler_06[4]; /* 0x006 */ u8 filler_06[4];
/* 0x00a */ u16 unk_0a; /* 0x00a */ u16 linkman_msg;
/* 0x00c */ u8 unk_0c; // parentChildMode? /* 0x00c */ u8 unk_0c; // parentChildMode?
/* 0x00d */ u8 playerCount; /* 0x00d */ u8 playerCount;
/* 0x00e */ u8 unk_0e; /* 0x00e */ u8 unk_0e;
/* 0x00f */ u8 unk_0f; /* 0x00f */ u8 unk_0f;
/* 0x010 */ u16 unk_10; /* 0x010 */ u16 linkman_param[2];
/* 0x012 */ u16 unk_12;
/* 0x014 */ u8 unk_14[RFU_CHILD_MAX][14]; /* 0x014 */ u8 unk_14[RFU_CHILD_MAX][14];
/* 0x04c */ u8 unk_4c[14]; /* 0x04c */ u8 unk_4c[14];
/* 0x05a */ u8 unk_5a; /* 0x05a */ u8 unk_5a;
@@ -286,7 +285,7 @@ struct UnkRfuStruct_2
/* 0x0e9 */ u8 unk_e9[5]; /* 0x0e9 */ u8 unk_e9[5];
/* 0x0ee */ vu8 unk_ee; /* 0x0ee */ vu8 unk_ee;
/* 0x0ef */ u8 unk_ef; /* 0x0ef */ u8 unk_ef;
/* 0x0f0 */ u8 unk_f0; /* 0x0f0 */ u8 linkLossRecoveryState;
/* 0x0f1 */ u8 unk_f1; /* 0x0f1 */ u8 unk_f1;
/* 0x0f2 */ u16 unk_f2[6]; /* 0x0f2 */ u16 unk_f2[6];
/* 0x0fe */ u16 unk_fe; /* 0x0fe */ u16 unk_fe;
@@ -302,7 +301,7 @@ struct UnkRfuStruct_2
/* 0x8f7 */ u8 unk_c3f[70]; /* 0x8f7 */ u8 unk_c3f[70];
/* 0x93d */ u8 unk_c85; /* 0x93d */ u8 unk_c85;
/* 0x93e */ u8 unk_c86; /* 0x93e */ u8 unk_c86;
/* 0x93f */ u8 unk_c87[5][7][2]; /* 0x93f */ u8 recvCmds[5][7][2];
/* 0x985 */ u8 unk_ccd; /* 0x985 */ u8 unk_ccd;
/* 0x986 */ u8 unk_cce; // childId /* 0x986 */ u8 unk_cce; // childId
/* 0x987 */ u8 unk_ccf; /* 0x987 */ u8 unk_ccf;
@@ -315,8 +314,8 @@ struct UnkRfuStruct_2
/* 0x994 */ vu8 unk_cdc; /* 0x994 */ vu8 unk_cdc;
/* 0x995 */ u8 unk_cdd; /* 0x995 */ u8 unk_cdd;
/* 0x996 */ u8 unk_cde[RFU_CHILD_MAX]; /* 0x996 */ u8 unk_cde[RFU_CHILD_MAX];
/* 0x99a */ u8 unk_ce2; /* 0x99a */ u8 bm_PartnerFlags;
/* 0x99b */ u8 unk_ce3; /* 0x99b */ u8 bm_DisconnectSlot;
/* 0x99c */ u8 unk_ce4; /* 0x99c */ u8 unk_ce4;
/* 0x99d */ u8 unk_ce5; /* 0x99d */ u8 unk_ce5;
/* 0x99e */ u8 unk_ce6; /* 0x99e */ u8 unk_ce6;
@@ -325,12 +324,29 @@ struct UnkRfuStruct_2
/* 0x9a1 */ u8 unk_ce9; /* 0x9a1 */ u8 unk_ce9;
/* 0x9a2 */ u8 unk_cea[RFU_CHILD_MAX]; /* 0x9a2 */ u8 unk_cea[RFU_CHILD_MAX];
/* 0x9a6 */ u8 unk_cee[RFU_CHILD_MAX]; /* 0x9a6 */ u8 unk_cee[RFU_CHILD_MAX];
}; // size: 0x9AC } GF_RFU_MANAGER; // size: 0x9AC
extern struct linkManagerTag lman; extern struct linkManagerTag lman;
extern struct GFtgtGname gHostRFUtgtGnameBuffer; extern struct GFtgtGname gHostRFUtgtGnameBuffer;
extern u8 gHostRFUtgtUnameBuffer[]; extern u8 gHostRFUtgtUnameBuffer[];
// Official signatures
u32 rfu_LMAN_REQBN_softReset_and_checkID(void);
void rfu_LMAN_requestChangeAgbClockMaster(void);
void rfu_LMAN_initializeRFU(INIT_PARAM *init_params);
u8 rfu_LMAN_establishConnection(u8 parent_child, u16 connect_period, u16 name_accept_period, u16 *acceptable_serialNo_list);
void rfu_LMAN_stopManager(bool8 forced_stop_and_RFU_reset_flag);
void rfu_LMAN_setMSCCallback(void (*MSC_callback_p)(u16));
void rfu_LMAN_REQ_sendData(bool8 clockChangeFlag);
void rfu_LMAN_powerDownRFU(void);
u8 rfu_LMAN_CHILD_connectParent(u16 parentId, u16 connect_period);
u8 rfu_LMAN_setLinkRecovery(u8 enable_flag, u16 recovery_period);
void rfu_LMAN_manager_entity(u32 rand);
void rfu_LMAN_syncVBlank(void);
u8 rfu_LMAN_initializeManager(void (*LMAN_callback_p)(u8, u8), void (*MSC_callback_p)(u16));
void rfu_LMAN_forceChangeSP(void);
// GameFreak signatures
void AddTextPrinterToWindow1(const u8 *str); void AddTextPrinterToWindow1(const u8 *str);
bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src); bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src);
void LinkRfu_FatalError(void); void LinkRfu_FatalError(void);
@@ -346,11 +362,10 @@ u8 sub_8116DE0(void);
void sub_80FBB4C(void); void sub_80FBB4C(void);
void sub_80F86F4(void); void sub_80F86F4(void);
void sub_80FB128(bool32 a0); void sub_80FB128(bool32 a0);
u32 rfu_LMAN_REQBN_softReset_and_checkID(void);
bool32 IsSendingKeysToRfu(void); bool32 IsSendingKeysToRfu(void);
void Rfu_set_zero(void); void Rfu_set_zero(void);
u8 GetRfuPlayerCount(void); u8 GetRfuPlayerCount(void);
void sub_80F9828(void); void StartSendingKeysToRfu(void);
u8 LinkRfu_GetMultiplayerId(void); u8 LinkRfu_GetMultiplayerId(void);
bool32 Rfu_InitBlockSend(const u8 * src, size_t size); bool32 Rfu_InitBlockSend(const u8 * src, size_t size);
bool8 sub_80FA0F8(u8 a0); bool8 sub_80FA0F8(u8 a0);
@@ -367,36 +382,23 @@ void sub_80F8DC0(void);
void sub_80FBB20(void); void sub_80FBB20(void);
bool8 sub_80FA484(bool32 a0); bool8 sub_80FA484(bool32 a0);
void var_800D_set_xB(void); void var_800D_set_xB(void);
struct GFtgtGname *sub_80F9800(void); struct GFtgtGname *GetHostRFUtgtGname(void);
void UpdateWirelessStatusIndicatorSprite(void); void UpdateWirelessStatusIndicatorSprite(void);
void InitRFU(void); void InitRFU(void);
void rfu_LMAN_requestChangeAgbClockMaster(void);
bool32 sub_80FBA00(void); bool32 sub_80FBA00(void);
void sub_80FC478(struct UnkRfuStruct_2_Sub_124 *ptr); void sub_80FC478(struct UnkRfuStruct_2_Sub_124 *ptr);
void sub_80FC4D4(struct UnkRfuStruct_2_Sub_9e8 *ptr); void sub_80FC4D4(struct UnkRfuStruct_2_Sub_9e8 *ptr);
void rfu_LMAN_initializeRFU(INIT_PARAM *init_params); void sub_80FB9E4(u8 a0, u16 msg);
u8 rfu_LMAN_establishConnection(u8 parent_child, u16 connect_period, u16 name_accept_period, u16 *acceptable_serialNo_list);
void rfu_LMAN_stopManager(bool8 a0);
void rfu_LMAN_setMSCCallback(void (*func)(u16));
void sub_80FB9E4(u8 a0, u16 a1);
u8 sub_80FB9F4(void); u8 sub_80FB9F4(void);
void rfu_LMAN_REQ_sendData(bool8 clockChangeFlag);
void sub_80FC588(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2); void sub_80FC588(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2);
void rfu_LMAN_powerDownRFU(void);
u8 rfu_LMAN_CHILD_connectParent(u16 parentId, u16 unk_1a);
bool8 sub_80FC79C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2); bool8 sub_80FC79C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2);
bool8 sub_80FC888(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2); bool8 sub_80FC888(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
void sub_80FC828(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2); void sub_80FC828(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2);
bool8 sub_80FC6E8(struct UnkRfuStruct_2_Sub_124 * a0, u8 *a1); bool8 sub_80FC6E8(struct UnkRfuStruct_2_Sub_124 * a0, u8 *a1);
void sub_80FC63C(struct UnkRfuStruct_2_Sub_9e8 * a0, u8 *a1); void sub_80FC63C(struct UnkRfuStruct_2_Sub_9e8 * a0, u8 *a1);
u8 rfu_LMAN_setLinkRecovery(u8 a0, u16 a1);
void rfu_LMAN_manager_entity(u32 a0);
void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 r2, s32 r3); void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 r2, s32 r3);
void rfu_LMAN_syncVBlank(void);
u8 rfu_LMAN_initializeManager(void (*func1)(u8, u8), void (*func2)(u16));
void rfu_LMAN_forceChangeSP(void);
void sub_80FAFE0(u8 a0); void sub_80FAFE0(u8 a0);
bool32 sub_80FA44C(u32 a0); bool32 sub_80FA44C(u32 a0);
bool8 sub_80FC1B0(void); bool8 sub_80FC1B0(void);
+15 -14
View File
@@ -91,7 +91,7 @@ static const char lib_ver[] = "RFU_V1024";
static const char str_checkMbootLL[] = "RFU-MBOOT"; 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 i;
u16 *dst; u16 *dst;
@@ -109,21 +109,21 @@ u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc
// An assert/debug print may have existed before, ie // An assert/debug print may have existed before, ie
// printf("%s %u < %u", "somefile.c:12345", buffByteSize, num) // printf("%s %u < %u", "somefile.c:12345", buffByteSize, num)
// to push this into r3? // to push this into r3?
r3 = sizeof(struct RfuAPIBuffer); r3 = RFU_API_BUFF_SIZE_RAM - 0x28;
if (buffByteSize < r3) if (buffByteSize < r3)
return ERR_RFU_API_BUFF_SIZE; return ERR_RFU_API_BUFF_SIZE;
} }
if (!copyInterruptToRam) if (!copyInterruptToRam)
{ {
r3 = 0x504; // same issue as above r3 = RFU_API_BUFF_SIZE_ROM - 0x28; // same issue as above
if (buffByteSize < r3) if (buffByteSize < r3)
return ERR_RFU_API_BUFF_SIZE; return ERR_RFU_API_BUFF_SIZE;
} }
gRfuLinkStatus = &APIBuffer->linkStatus; gRfuLinkStatus = (void *)APIBuffer + 0;
gRfuStatic = &APIBuffer->static_; gRfuStatic = (void *)APIBuffer + 0xb4;
gRfuFixed = &APIBuffer->fixed; gRfuFixed = (void *)APIBuffer + 0xdc;
gRfuSlotStatusNI[0] = &APIBuffer->NI[0]; gRfuSlotStatusNI[0] = (void *)APIBuffer + 0x1bc;
gRfuSlotStatusUNI[0] = &APIBuffer->UNI[0]; gRfuSlotStatusUNI[0] = (void *)APIBuffer + 0x37c;
for (i = 1; i < RFU_CHILD_MAX; ++i) for (i = 1; i < RFU_CHILD_MAX; ++i)
{ {
gRfuSlotStatusNI[i] = &gRfuSlotStatusNI[i - 1][1]; gRfuSlotStatusNI[i] = &gRfuSlotStatusNI[i - 1][1];
@@ -180,20 +180,20 @@ void rfu_REQ_PARENT_resumeRetransmitAndChange(void)
u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag) u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag)
{ {
struct RfuIntrStruct *buf; u8 *buf;
*ackFlag = 0; *ackFlag = 0;
if (gRfuLinkStatus->parentChild != MODE_PARENT) if (gRfuLinkStatus->parentChild != MODE_PARENT)
return ERR_MODE_NOT_PARENT; return ERR_MODE_NOT_PARENT;
buf = rfu_getSTWIRecvBuffer(); buf = rfu_getSTWIRecvBuffer();
switch (buf->rxPacketAlloc.rfuPacket8.data[0]) switch (*buf)
{ {
case 40: case 40:
case 54: case 54:
if (buf->rxPacketAlloc.rfuPacket8.data[1] == 0) if (buf[1] == 0)
*ackFlag = gRfuLinkStatus->connSlotFlag; *ackFlag = gRfuLinkStatus->connSlotFlag;
else else
*ackFlag = buf->rxPacketAlloc.rfuPacket8.data[4]; *ackFlag = buf[4];
return 0; return 0;
default: default:
return ERR_REQ_CMD_ID; return ERR_REQ_CMD_ID;
@@ -205,9 +205,9 @@ void rfu_setTimerInterrupt(u8 timerNo, IntrFunc *timerIntrTable_p)
STWI_init_timer(timerIntrTable_p, timerNo); 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)) void rfu_setMSCCallback(void (*callback)(u16 reqCommandId))
@@ -2035,6 +2035,7 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct
} }
} }
_081E30AE: _081E30AE:
;
} }
else if (r12->state == SLOT_STATE_SEND_LAST) else if (r12->state == SLOT_STATE_SEND_LAST)
{ {
+1 -1
View File
@@ -721,7 +721,7 @@ void sub_8009FE8(void)
{ {
if (gWirelessCommType) if (gWirelessCommType)
{ {
sub_80F9828(); StartSendingKeysToRfu();
} }
gLinkCallback = sub_800A040; gLinkCallback = sub_800A040;
} }
+273 -276
View File
File diff suppressed because it is too large Load Diff
+169 -156
View File
@@ -24,12 +24,12 @@ struct UnkRfuStruct_8010A14{
static EWRAM_DATA struct InitializeParametersTag sRfuReqConfig = {}; static EWRAM_DATA struct InitializeParametersTag sRfuReqConfig = {};
static EWRAM_DATA struct UnkLinkRfuStruct_02022B44 gUnknown_203AC08 = {}; static EWRAM_DATA struct UnkLinkRfuStruct_02022B44 gUnknown_203AC08 = {};
static struct RfuAPIBuffer gRfuAPIBuffer; static u32 gf_rfu_REQ_api[(RFU_API_BUFF_SIZE_RAM - 0x28) / 4];
static u8 gUnknown_3001FF8[14]; static u8 gUnknown_3001FF8[14];
static u16 gUnknown_3002008[7]; static u16 gUnknown_3002008[7];
struct GFtgtGname gHostRFUtgtGnameBuffer; struct GFtgtGname gHostRFUtgtGnameBuffer;
struct UnkRfuStruct_2 Rfu; GF_RFU_MANAGER Rfu;
u8 gHostRFUtgtUnameBuffer[PLAYER_NAME_LENGTH + 1]; u8 gHostRFUtgtUnameBuffer[PLAYER_NAME_LENGTH + 1];
static void sub_80F8AA4(void); static void sub_80F8AA4(void);
@@ -51,11 +51,11 @@ static void sub_80FA9D0(u16 a0);
static void sub_80FAA58(void * a0); static void sub_80FAA58(void * a0);
static void sub_80FAA94(u8 taskId); static void sub_80FAA94(u8 taskId);
static void sub_80FACF0(u8 taskId); static void sub_80FACF0(u8 taskId);
static void sub_80FB0E8(u32 a0); static void sub_80FB0E8(u32 msg);
static void sub_80FB564(s32 a0); static void sub_80FB564(s32 a0);
static void sub_80FBB74(void); static void sub_80FBB74(void);
static u8 sub_80FBC70(const u8 *a0, u16 a1); static u8 sub_80FBC70(const u8 *a0, u16 a1);
static void sub_80FBCF8(u32 a0); static void sub_80FBCF8(u32 bmDisconnectSlot);
static void sub_80FBE20(u32 a0, u32 a1); static void sub_80FBE20(u32 a0, u32 a1);
static void sub_80FC028(u8 taskId); static void sub_80FC028(u8 taskId);
static void sub_80FC208(void); static void sub_80FC208(void);
@@ -218,7 +218,7 @@ void InitRFU(void)
void sub_80F86F4(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 - 0x28, gIntrTable + 1, TRUE))
{ {
gLinkType = 0; gLinkType = 0;
sub_80FB128(FALSE); sub_80FB128(FALSE);
@@ -371,31 +371,31 @@ static void sub_80F893C(u8 taskId)
static void sub_80F8AA4(void) static void sub_80F8AA4(void)
{ {
u8 i; u8 i;
u8 r5 = lman.acceptSlot_flag; u8 acceptSlot = lman.acceptSlot_flag;
for (i = 0; i < RFU_CHILD_MAX; i++) 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_setRecvBuffer(TYPE_UNI, i, Rfu.unk_14[i], sizeof(Rfu.unk_14[i]));
rfu_clearSlot(TYPE_UNI_SEND | TYPE_UNI_RECV, i); rfu_clearSlot(TYPE_UNI_SEND | TYPE_UNI_RECV, i);
} }
r5 >>= 1; acceptSlot >>= 1;
} }
} }
static void sub_80F8AEC(void) static void sub_80F8AEC(void)
{ {
u8 r5 = lman.acceptSlot_flag; u8 acceptSlot = lman.acceptSlot_flag;
rfu_UNI_setSendData(r5, Rfu.unk_c87, sizeof(Rfu.unk_c87)); rfu_UNI_setSendData(acceptSlot, Rfu.recvCmds, sizeof(Rfu.recvCmds));
Rfu.unk_cda = sub_80F886C(r5); Rfu.unk_cda = sub_80F886C(acceptSlot);
Rfu.unk_ce2 = r5; Rfu.bm_PartnerFlags = acceptSlot;
sub_80F887C(r5, -1); sub_80F887C(acceptSlot, -1);
Rfu.unk_0c = 1; Rfu.unk_0c = 1;
} }
static void sub_80F8B34(u8 taskId) static void sub_80F8B34(u8 taskId)
{ {
if (sub_80F9800()->unk_0a_0 == 0x54 && sub_80FB9F4() == 4) if (GetHostRFUtgtGname()->unk_0a_0 == 0x54 && sub_80FB9F4() == 4)
{ {
rfu_REQ_disconnect(lman.acceptSlot_flag); rfu_REQ_disconnect(lman.acceptSlot_flag);
rfu_waitREQComplete(); rfu_waitREQComplete();
@@ -616,11 +616,11 @@ static void sub_80F8FD4(void)
for (i = 0; i < 5; i++) for (i = 0; i < 5; i++)
{ {
struct UnkRfuStruct_2 *ptr = &Rfu; GF_RFU_MANAGER *ptr = &Rfu;
for (j = 0; j < 7; j++) for (j = 0; j < 7; j++)
{ {
ptr->unk_c87[i][j][1] = gRecvCmds[i][j] >> 8; ptr->recvCmds[i][j][1] = gRecvCmds[i][j] >> 8;
ptr->unk_c87[i][j][0] = gRecvCmds[i][j]; ptr->recvCmds[i][j][0] = gRecvCmds[i][j];
} }
} }
CpuFill16(0, gRecvCmds, sizeof gRecvCmds); CpuFill16(0, gRecvCmds, sizeof gRecvCmds);
@@ -693,14 +693,14 @@ static bool32 sub_80F911C(void)
else else
{ {
Rfu.unk_cdb = 0; 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_cdc)
{ {
if (Rfu.unk_ce3) if (Rfu.bm_DisconnectSlot)
{ {
sub_80FBCF8(Rfu.unk_ce3); sub_80FBCF8(Rfu.bm_DisconnectSlot);
Rfu.unk_ce3 = 0; Rfu.bm_DisconnectSlot = 0;
if (Rfu.unk_ce4 == 1) if (Rfu.unk_ce4 == 1)
{ {
sub_80FB9E4(2, 0x8000); sub_80FB9E4(2, 0x8000);
@@ -748,7 +748,7 @@ static bool32 sub_80F9204(void)
} }
rfu_REQ_recvData(); rfu_REQ_recvData();
rfu_waitREQComplete(); rfu_waitREQComplete();
if ((lman.parentAck_flag & Rfu.unk_ce2) == Rfu.unk_ce2) if ((lman.parentAck_flag & Rfu.bm_PartnerFlags) == Rfu.bm_PartnerFlags)
{ {
Rfu.unk_cdc = 0; Rfu.unk_cdc = 0;
gUnknown_203AC08.unk_06++; gUnknown_203AC08.unk_06++;
@@ -796,12 +796,12 @@ static bool32 sub_80F9204(void)
rfu_setRecvBuffer(TYPE_UNI, i, Rfu.unk_14[i], sizeof(Rfu.unk_14[i])); 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_ce9 = Rfu.unk_ce5;
Rfu.unk_ce2 |= Rfu.unk_ce5; Rfu.bm_PartnerFlags |= Rfu.unk_ce5;
Rfu.unk_ce5 = 0; Rfu.unk_ce5 = 0;
rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.unk_c87, sizeof(Rfu.unk_c87)); rfu_UNI_setSendData(Rfu.bm_PartnerFlags, Rfu.recvCmds, sizeof(Rfu.recvCmds));
Rfu.unk_cda = sub_80F886C(Rfu.unk_ce2); Rfu.unk_cda = sub_80F886C(Rfu.bm_PartnerFlags);
CreateTask(sub_80FAA94, 0); CreateTask(sub_80FAA94, 0);
} }
} }
@@ -939,7 +939,7 @@ static u8 sub_80F9770(const u8 *a0)
return a0[Rfu.unk_c3e]; return a0[Rfu.unk_c3e];
} }
static void rfu_func_080F97B8(void) static void RfuFunc_SendKeysToRfu(void)
{ {
static u8 gUnknown_3001188; static u8 gUnknown_3001188;
if (gReceivedRemoteLinkPlayers if (gReceivedRemoteLinkPlayers
@@ -952,20 +952,20 @@ static void rfu_func_080F97B8(void)
} }
} }
struct GFtgtGname *sub_80F9800(void) struct GFtgtGname *GetHostRFUtgtGname(void)
{ {
return &gHostRFUtgtGnameBuffer; return &gHostRFUtgtGnameBuffer;
} }
bool32 IsSendingKeysToRfu(void) 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); AGB_ASSERT_EX(Rfu.RfuFunc == NULL, ABSPATH("rfu.c"), 1473);
Rfu.RfuFunc = rfu_func_080F97B8; Rfu.RfuFunc = RfuFunc_SendKeysToRfu;
} }
void Rfu_set_zero(void) void Rfu_set_zero(void)
@@ -1015,7 +1015,7 @@ static void sub_80F9868(u8 unused)
{ {
Rfu.unk_80[i].unk_12 = 2; Rfu.unk_80[i].unk_12 = 2;
Rfu_SetBlockReceivedFlag(i); Rfu_SetBlockReceivedFlag(i);
if (sub_80F9800()->unk_0a_0 == 0x45 && gReceivedRemoteLinkPlayers != 0 && Rfu.unk_0c == 0) if (GetHostRFUtgtGname()->unk_0a_0 == 0x45 && gReceivedRemoteLinkPlayers != 0 && Rfu.unk_0c == 0)
sub_80FAA58(gBlockRecvBuffer); sub_80FAA58(gBlockRecvBuffer);
} }
} }
@@ -1056,7 +1056,7 @@ static void sub_80F9868(u8 unused)
case 0xee00: case 0xee00:
if (Rfu.unk_0c == 1) if (Rfu.unk_0c == 1)
{ {
Rfu.unk_ce3 |= gRecvCmds[i][1]; Rfu.bm_DisconnectSlot |= gRecvCmds[i][1];
Rfu.unk_ce4 = gRecvCmds[i][2]; Rfu.unk_ce4 = gRecvCmds[i][2];
sub_80FA9D0(gRecvCmds[i][1]); sub_80FA9D0(gRecvCmds[i][1]);
} }
@@ -1147,7 +1147,7 @@ static void sub_80F9D04(u16 command)
break; break;
case 0x7700: case 0x7700:
case 0x7800: case 0x7800:
tmp = Rfu.unk_ce2 ^ Rfu.unk_ce3; tmp = Rfu.bm_PartnerFlags ^ Rfu.bm_DisconnectSlot;
Rfu.playerCount = gUnknown_843EC41[tmp] + 1; Rfu.playerCount = gUnknown_843EC41[tmp] + 1;
gSendCmd[1] = Rfu.playerCount; gSendCmd[1] = Rfu.playerCount;
buff = (u8 *)(gSendCmd + 2); buff = (u8 *)(gSendCmd + 2);
@@ -1308,7 +1308,7 @@ void LinkRfu_FatalError(void)
{ {
rfu_LMAN_requestChangeAgbClockMaster(); rfu_LMAN_requestChangeAgbClockMaster();
Rfu.unk_ce4 = 1; Rfu.unk_ce4 = 1;
Rfu.unk_ce3 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; Rfu.bm_DisconnectSlot = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
} }
static void sub_80FA1C4(void) static void sub_80FA1C4(void)
@@ -1848,7 +1848,7 @@ static void sub_80FAD98(void)
gWirelessCommType = 2; gWirelessCommType = 2;
SetMainCallback2(CB2_LinkError); SetMainCallback2(CB2_LinkError);
gMain.savedCallback = 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); sub_800ACBC((Rfu.linkman_msg << 16) | (Rfu.linkman_param[0] << 8) | Rfu.linkman_param[1], Rfu.unk_124.unk_8c2, Rfu.unk_9e8.unk_232, sub_80FB9F4() == 2);
Rfu.unk_ee = 2; Rfu.unk_ee = 2;
CloseLink(); CloseLink();
} }
@@ -1867,7 +1867,7 @@ static void rfu_REQ_recvData_then_sendData(void)
{ {
rfu_REQ_recvData(); rfu_REQ_recvData();
rfu_waitREQComplete(); rfu_waitREQComplete();
rfu_LMAN_REQ_sendData(0); rfu_LMAN_REQ_sendData(RFU_CHILD_CLOCK_SLAVE_OFF);
} }
} }
@@ -1955,11 +1955,11 @@ void sub_80FB030(u32 linkPlayerCount)
u32 r7; u32 r7;
s32 r8; s32 r8;
if (sub_80F9800()->unk_0a_0 == 0x45) if (GetHostRFUtgtGname()->unk_0a_0 == 0x45)
{ {
r5 = 0; r5 = 0;
r7 = 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++) for (i = 0; i < RFU_CHILD_MAX; i++)
{ {
if ((r8 >> i) & 1) if ((r8 >> i) & 1)
@@ -1975,13 +1975,13 @@ void sub_80FB030(u32 linkPlayerCount)
} }
} }
static void sub_80FB0E8(u32 a0) static void sub_80FB0E8(u32 msg)
{ {
if (Rfu.unk_ee == 0) if (Rfu.unk_ee == 0)
{ {
Rfu.unk_10 = lman.param[0]; Rfu.linkman_param[0] = lman.param[0];
Rfu.unk_12 = lman.param[1]; Rfu.linkman_param[1] = lman.param[1];
Rfu.unk_0a = a0; Rfu.linkman_msg = msg;
Rfu.unk_ee = 1; Rfu.unk_ee = 1;
} }
} }
@@ -2010,25 +2010,25 @@ static void sub_80FB174(void)
Rfu.RfuFunc = sub_80FB154; Rfu.RfuFunc = sub_80FB154;
} }
static void sub_80FB184(u8 a0, u8 unused1) static void sub_80FB184(u8 msg, u8 param_count)
{ {
u8 i; u8 i;
u8 r6 = 0; u8 r6 = 0;
switch (a0) switch (msg)
{ {
case 0x00: case LMAN_MSG_INITIALIZE_COMPLETED:
Rfu.unk_04 = 2; Rfu.unk_04 = 2;
break; break;
case 0x10: case LMAN_MSG_NEW_CHILD_CONNECT_DETECTED:
break; break;
case 0x11: case LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED:
sub_80FB564(lman.param[0]); sub_80FB564(lman.param[0]);
for (i = 0; i < RFU_CHILD_MAX; i++) for (i = 0; i < RFU_CHILD_MAX; i++)
{ {
if ((lman.param[0] >> i) & 1) if ((lman.param[0] >> i) & 1)
{ {
struct GFtgtGname *structPtr = (void *)&gRfuLinkStatus->partner[i].gname; struct GFtgtGname *structPtr = (void *)&gRfuLinkStatus->partner[i].gname;
if (structPtr->unk_0a_0 == sub_80F9800()->unk_0a_0) if (structPtr->unk_0a_0 == GetHostRFUtgtGname()->unk_0a_0)
{ {
Rfu.unk_cd1[i] = 0; Rfu.unk_cd1[i] = 0;
Rfu.unk_cd5[i] = 0; Rfu.unk_cd5[i] = 0;
@@ -2046,11 +2046,11 @@ static void sub_80FB184(u8 a0, u8 unused1)
rfu_waitREQComplete(); rfu_waitREQComplete();
} }
break; break;
case 0x12: case LMAN_MSG_NEW_CHILD_CONNECT_REJECTED:
break; break;
case 0x13: case LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED:
break; break;
case 0x14: case LMAN_MSG_END_WAIT_CHILD_NAME:
if (Rfu.unk_ce7 != lman.acceptSlot_flag) if (Rfu.unk_ce7 != lman.acceptSlot_flag)
{ {
rfu_REQ_disconnect(Rfu.unk_ce7 ^ lman.acceptSlot_flag); rfu_REQ_disconnect(Rfu.unk_ce7 ^ lman.acceptSlot_flag);
@@ -2058,38 +2058,42 @@ static void sub_80FB184(u8 a0, u8 unused1)
} }
Rfu.unk_04 = 0x11; Rfu.unk_04 = 0x11;
break; break;
case 0x31: case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY:
Rfu.unk_f0 = 1; Rfu.linkLossRecoveryState = 1;
break; break;
case 0x32: case LMAN_MSG_LINK_RECOVERY_SUCCESSED:
Rfu.unk_f0 = 3; Rfu.linkLossRecoveryState = 3;
break; break;
case 0x30: case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED:
case 0x33: case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED:
Rfu.unk_f0 = 4; Rfu.linkLossRecoveryState = 4;
Rfu.unk_ce2 &= ~lman.param[0]; Rfu.bm_PartnerFlags &= ~lman.param[0];
if (gReceivedRemoteLinkPlayers == 1) if (gReceivedRemoteLinkPlayers == 1)
{ {
if (Rfu.unk_ce2 == 0) if (Rfu.bm_PartnerFlags == 0)
sub_80FB0E8(a0); sub_80FB0E8(msg);
else else
sub_80FB174(); sub_80FB174();
} }
sub_80FB9E4(2, a0); sub_80FB9E4(2, msg);
break; break;
case 0x34: case 0x34:
break; 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; break;
case 0xf3: case LMAN_MSG_LMAN_API_ERROR_RETURN:
sub_80FB9E4(1, a0); sub_80FB9E4(1, msg);
sub_80FB0E8(a0); sub_80FB0E8(msg);
Rfu.unk_ef = 1; Rfu.unk_ef = 1;
break; break;
case 0xf0 ... 0xf2: case LMAN_MSG_REQ_API_ERROR:
case 0xff: case LMAN_MSG_WATCH_DOG_TIMER_ERROR:
sub_80FB0E8(a0); case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA:
sub_80FB9E4(1, a0); case LMAN_MSG_RFU_FATAL_ERROR:
sub_80FB0E8(msg);
sub_80FB9E4(1, msg);
Rfu.unk_cdb = 1; Rfu.unk_cdb = 1;
break; break;
} }
@@ -2097,68 +2101,72 @@ static void sub_80FB184(u8 a0, u8 unused1)
static const u8 unref_843EDF3[] = _(" あきと"); 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; Rfu.unk_04 = 6;
break; break;
case 0x20: case LMAN_MSG_PARENT_FOUND:
Rfu.unk_ccd = lman.param[0]; Rfu.unk_ccd = lman.param[0];
break; break;
case 0x21: case LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED:
break; break;
case 0x22: case LMAN_MSG_CONNECT_PARENT_SUCCESSED:
Rfu.unk_c3e = lman.param[0]; Rfu.unk_c3e = lman.param[0];
break; break;
case 0x23: case LMAN_MSG_CONNECT_PARENT_FAILED:
sub_80FB9E4(2, a0); sub_80FB9E4(2, msg);
break; break;
case 0x24: case LMAN_MSG_CHILD_NAME_SEND_COMPLETED:
Rfu.unk_04 = 11; Rfu.unk_04 = 11;
Rfu.unk_c85 = 0; Rfu.unk_c85 = 0;
Rfu.unk_c86 = 0; Rfu.unk_c86 = 0;
rfu_setRecvBuffer(TYPE_NI, Rfu.unk_c3e, &Rfu.unk_c86, 1); 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_UNI, Rfu.unk_c3e, Rfu.unk_c3f, 70);
break; break;
case 0x25: case LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED:
sub_80FB9E4(2, 0x25); sub_80FB9E4(2, msg);
break; break;
case 0x30: case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED:
Rfu.unk_f0 = 2; Rfu.linkLossRecoveryState = 2;
if (Rfu.unk_c86 == 6) if (Rfu.unk_c86 == 6)
break; break;
case 0x33: case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED:
if (Rfu.unk_f0 != 2) if (Rfu.linkLossRecoveryState != 2)
Rfu.unk_f0 = 4; Rfu.linkLossRecoveryState = 4;
if (Rfu.unk_c86 != 9) if (Rfu.unk_c86 != 9)
sub_80FB9E4(2, a0); sub_80FB9E4(2, msg);
nullsub_87("LINK LOSS DISCONNECT!", 5, 5); nullsub_87("LINK LOSS DISCONNECT!", 5, 5);
if (gReceivedRemoteLinkPlayers == 1) if (gReceivedRemoteLinkPlayers == 1)
sub_80FB0E8(a0); sub_80FB0E8(msg);
break; break;
case 0x31: case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY:
Rfu.unk_f0 = 1; Rfu.linkLossRecoveryState = 1;
nullsub_87("LINK LOSS RECOVERY NOW", 5, 5); nullsub_87("LINK LOSS RECOVERY NOW", 5, 5);
break; break;
case 0x32: case LMAN_MSG_LINK_RECOVERY_SUCCESSED:
Rfu.unk_f0 = 3; Rfu.linkLossRecoveryState = 3;
Rfu.unk_c3c = 1; Rfu.unk_c3c = 1;
break; break;
case 0x34: case 0x34:
break; 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; break;
case 0xF3: case LMAN_MSG_LMAN_API_ERROR_RETURN:
sub_80FB9E4(1, a0); sub_80FB9E4(1, msg);
sub_80FB0E8(a0); sub_80FB0E8(msg);
Rfu.unk_ef = 1; Rfu.unk_ef = 1;
break; break;
case 0xF0 ... 0xF2: case LMAN_MSG_REQ_API_ERROR:
case 0xFF: case LMAN_MSG_WATCH_DOG_TIMER_ERROR:
sub_80FB9E4(1, a0); case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA:
sub_80FB0E8(a0); case LMAN_MSG_RFU_FATAL_ERROR:
sub_80FB9E4(1, msg);
sub_80FB0E8(msg);
Rfu.unk_cdb = 1; Rfu.unk_cdb = 1;
break; break;
} }
@@ -2196,20 +2204,20 @@ static u8 sub_80FB5A0(s32 a0)
return ret; return ret;
} }
static void sub_80FB5EC(u8 a0, u8 unused1) static void sub_80FB5EC(u8 msg, u8 param_count)
{ {
u8 r1; u8 r1;
switch (a0) switch (msg)
{ {
case 0x00: case LMAN_MSG_INITIALIZE_COMPLETED:
Rfu.unk_04 = 0x11; Rfu.unk_04 = 0x11;
break; break;
case 0x10: case LMAN_MSG_NEW_CHILD_CONNECT_DETECTED:
sub_80FB9E4(4, 0); sub_80FB9E4(4, 0);
break; break;
case 0x11: case LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED:
if (sub_80F9800()->unk_0a_0 == 0x45 && Rfu.unk_cd9 == 0) if (GetHostRFUtgtGname()->unk_0a_0 == 0x45 && Rfu.unk_cd9 == 0)
{ {
u8 idx = sub_80FB5A0(lman.param[0]); u8 idx = sub_80FB5A0(lman.param[0]);
if (idx != 0) if (idx != 0)
@@ -2228,23 +2236,23 @@ static void sub_80FB5EC(u8 a0, u8 unused1)
} }
if (idx != lman.param[0]) if (idx != lman.param[0])
{ {
Rfu.unk_ce3 |= (idx ^ lman.param[0]); Rfu.bm_DisconnectSlot |= (idx ^ lman.param[0]);
Rfu.unk_ce4 = 2; Rfu.unk_ce4 = 2;
} }
} }
else if (sub_80F9800()->unk_0a_0 == 0x54) else if (GetHostRFUtgtGname()->unk_0a_0 == 0x54)
{ {
rfu_REQ_disconnect(lman.acceptSlot_flag); rfu_REQ_disconnect(lman.acceptSlot_flag);
rfu_waitREQComplete(); rfu_waitREQComplete();
} }
sub_80FB564(lman.param[0]); sub_80FB564(lman.param[0]);
break; break;
case 0x12: case LMAN_MSG_NEW_CHILD_CONNECT_REJECTED:
break; break;
case 0x13: case LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED:
break; break;
case 0x14: case LMAN_MSG_END_WAIT_CHILD_NAME:
if (sub_80F9800()->unk_0a_0 != 0x45 && lman.acceptCount > 1) if (GetHostRFUtgtGname()->unk_0a_0 != 0x45 && lman.acceptCount > 1)
{ {
r1 = 1 << sub_80F886C(lman.param[0]); r1 = 1 << sub_80F886C(lman.param[0]);
rfu_REQ_disconnect(lman.acceptSlot_flag ^ r1); rfu_REQ_disconnect(lman.acceptSlot_flag ^ r1);
@@ -2253,15 +2261,15 @@ static void sub_80FB5EC(u8 a0, u8 unused1)
if (Rfu.unk_04 == 0xF) if (Rfu.unk_04 == 0xF)
Rfu.unk_04 = 0x10; Rfu.unk_04 = 0x10;
break; break;
case 0x20: case LMAN_MSG_PARENT_FOUND:
Rfu.unk_ccd = lman.param[0]; Rfu.unk_ccd = lman.param[0];
break; break;
case 0x21: case LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED:
break; break;
case 0x22: case LMAN_MSG_CONNECT_PARENT_SUCCESSED:
Rfu.unk_c3e = lman.param[0]; Rfu.unk_c3e = lman.param[0];
break; break;
case 0x23: case LMAN_MSG_CONNECT_PARENT_FAILED:
Rfu.unk_04 = 0x12; Rfu.unk_04 = 0x12;
if (Rfu.unk_ccf < 2) if (Rfu.unk_ccf < 2)
{ {
@@ -2270,67 +2278,72 @@ static void sub_80FB5EC(u8 a0, u8 unused1)
} }
else else
{ {
sub_80FB9E4(2, a0); sub_80FB9E4(2, msg);
} }
break; break;
case 0x24: case LMAN_MSG_CHILD_NAME_SEND_COMPLETED:
Rfu.unk_04 = 0xD; Rfu.unk_04 = 0xD;
sub_80FB9E4(3, 0); sub_80FB9E4(3, 0);
rfu_setRecvBuffer(TYPE_UNI, Rfu.unk_c3e, Rfu.unk_c3f, sizeof(Rfu.unk_c3f)); rfu_setRecvBuffer(TYPE_UNI, Rfu.unk_c3e, Rfu.unk_c3f, sizeof(Rfu.unk_c3f));
break; break;
case 0x25: case LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED:
sub_80FB9E4(2, a0); sub_80FB9E4(2, msg);
break; break;
case 0x31: case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY:
if (lman.acceptSlot_flag & lman.param[0]) if (lman.acceptSlot_flag & lman.param[0])
Rfu.unk_f0 = 1; Rfu.linkLossRecoveryState = 1;
break; break;
case 0x32: case LMAN_MSG_LINK_RECOVERY_SUCCESSED:
Rfu.unk_f0 = 3; Rfu.linkLossRecoveryState = 3;
if (gRfuLinkStatus->parentChild == MODE_CHILD) if (gRfuLinkStatus->parentChild == MODE_CHILD)
Rfu.unk_c3c = 1; Rfu.unk_c3c = 1;
break; break;
case 0x30: case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED:
Rfu.unk_f0 = 2; Rfu.linkLossRecoveryState = 2;
case 0x33: // fallthrough
if (Rfu.unk_f0 != 2) case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED:
Rfu.unk_f0 = 4; if (Rfu.linkLossRecoveryState != 2)
Rfu.linkLossRecoveryState = 4;
if (Rfu.unk_0c == 1) if (Rfu.unk_0c == 1)
{ {
if (gReceivedRemoteLinkPlayers == 1) if (gReceivedRemoteLinkPlayers == 1)
{ {
Rfu.unk_ce2 &= ~(lman.param[0]); Rfu.bm_PartnerFlags &= ~(lman.param[0]);
if (Rfu.unk_ce2 == 0) if (Rfu.bm_PartnerFlags == 0)
sub_80FB0E8(a0); sub_80FB0E8(msg);
else else
sub_80FB174(); sub_80FB174();
} }
} }
else if (Rfu.unk_ce4 != 2 && gReceivedRemoteLinkPlayers == 1) else if (Rfu.unk_ce4 != 2 && gReceivedRemoteLinkPlayers == 1)
{ {
sub_80FB0E8(a0); sub_80FB0E8(msg);
rfu_LMAN_stopManager(0); rfu_LMAN_stopManager(0);
} }
if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && lman.pcswitch_flag == 0 && FuncIsActiveTask(sub_80F8B34) == TRUE) if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && lman.pcswitch_flag == 0 && FuncIsActiveTask(sub_80F8B34) == TRUE)
Rfu.unk_04 = 0x11; Rfu.unk_04 = 0x11;
sub_80FB9E4(2, a0); sub_80FB9E4(2, msg);
break; break;
case 0x40: case LMAN_MSG_LINK_DISCONNECTED_BY_USER:
Rfu.unk_ce3 = 0; Rfu.bm_DisconnectSlot = 0;
break; 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; break;
case 0xF3: case LMAN_MSG_LMAN_API_ERROR_RETURN:
sub_80FB9E4(1, a0); sub_80FB9E4(1, msg);
sub_80FB0E8(a0); sub_80FB0E8(msg);
Rfu.unk_ef = 1; Rfu.unk_ef = 1;
break; break;
case 0xF0 ... 0xF2: case LMAN_MSG_REQ_API_ERROR:
case 0xFF: case LMAN_MSG_WATCH_DOG_TIMER_ERROR:
sub_80FB0E8(a0); case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA:
sub_80FB9E4(1, a0); case LMAN_MSG_RFU_FATAL_ERROR:
sub_80FB0E8(msg);
sub_80FB9E4(1, msg);
Rfu.unk_cdb = 0; Rfu.unk_cdb = 0;
break; break;
} }
@@ -2341,10 +2354,10 @@ void sub_80FB9D0(void)
Rfu.unk_ce4 = 2; Rfu.unk_ce4 = 2;
} }
void sub_80FB9E4(u8 a0, u16 a1) void sub_80FB9E4(u8 a0, u16 msg)
{ {
Rfu.unk_f1 = a0; Rfu.unk_f1 = a0;
Rfu.unk_0a = a1; Rfu.linkman_msg = msg;
} }
u8 sub_80FB9F4(void) u8 sub_80FB9F4(void)
@@ -2499,14 +2512,14 @@ static u8 sub_80FBC70(const u8 *a0, u16 a1)
return ret; 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_waitREQComplete();
Rfu.unk_ce2 &= ~(a0); Rfu.bm_PartnerFlags &= ~(bmDisconnectSlot);
rfu_clearSlot(TYPE_UNI_SEND, Rfu.unk_cda); rfu_clearSlot(TYPE_UNI_SEND, Rfu.unk_cda);
rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.unk_c87, 70); rfu_UNI_setSendData(Rfu.bm_PartnerFlags, Rfu.recvCmds, 70);
Rfu.unk_cda = sub_80F886C(Rfu.unk_ce2); Rfu.unk_cda = sub_80F886C(Rfu.bm_PartnerFlags);
} }
void sub_80FBD4C(const u8 *ptr, u16 a1) void sub_80FBD4C(const u8 *ptr, u16 a1)
@@ -2525,7 +2538,7 @@ void sub_80FBD6C(u32 a0)
for (i = 0; i < RFU_CHILD_MAX; i++) 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; var |= 1 << i;
} }
if (var) if (var)
@@ -2577,7 +2590,7 @@ static void sub_80FBE80(u8 taskId)
if (sub_80F8ECC()) if (sub_80F8ECC())
DestroyTask(taskId); DestroyTask(taskId);
} }
else if (sub_80F9800()->unk_0a_0 == 0x15 || sub_80F9800()->unk_0a_0 == 0x16) else if (GetHostRFUtgtGname()->unk_0a_0 == 0x15 || GetHostRFUtgtGname()->unk_0a_0 == 0x16)
{ {
data[15]++; data[15]++;
} }
@@ -2619,7 +2632,7 @@ void sub_80FBF54(const u8 *src, u16 trainerId)
static bool32 sub_80FBF98(s16 a1, struct GFtgtGname *structPtr) static bool32 sub_80FBF98(s16 a1, struct GFtgtGname *structPtr)
{ {
if (sub_80F9800()->unk_0a_0 == 0x45) if (GetHostRFUtgtGname()->unk_0a_0 == 0x45)
{ {
if (structPtr->unk_0a_0 != 0x45) if (structPtr->unk_0a_0 != 0x45)
return TRUE; return TRUE;
@@ -2709,7 +2722,7 @@ void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2)
bool8 sub_80FC1B0(void) bool8 sub_80FC1B0(void)
{ {
if (Rfu.unk_f0 == 1) if (Rfu.linkLossRecoveryState == 1)
return TRUE; return TRUE;
else else
return FALSE; return FALSE;
+2 -2
View File
@@ -3881,7 +3881,7 @@ static void CursorCB_Register(u8 taskId)
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE); 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: case CANT_REGISTER_MON:
StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow); StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow);
@@ -3907,7 +3907,7 @@ static void CursorCB_Trade1(u8 taskId)
u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2);
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE); 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) if (stringId != UR_TRADE_MSG_NONE)
{ {
+5 -5
View File
@@ -3089,20 +3089,20 @@ static void sub_81186E0(u8 taskId)
} }
break; break;
case 42: case 42:
if (sub_80F9800()->species == SPECIES_NONE) if (GetHostRFUtgtGname()->species == SPECIES_NONE)
{ {
data->state = 43; data->state = 43;
} }
else else
{ {
if (sub_80F9800()->species == SPECIES_EGG) if (GetHostRFUtgtGname()->species == SPECIES_EGG)
{ {
StringCopy(gStringVar4, gUnknown_8458DE8); StringCopy(gStringVar4, gUnknown_8458DE8);
} }
else else
{ {
StringCopy(gStringVar1, gSpeciesNames[sub_80F9800()->species]); StringCopy(gStringVar1, gSpeciesNames[GetHostRFUtgtGname()->species]);
ConvertIntToDecimalStringN(gStringVar2, sub_80F9800()->level, STR_CONV_MODE_LEFT_ALIGN, 3); ConvertIntToDecimalStringN(gStringVar2, GetHostRFUtgtGname()->level, STR_CONV_MODE_LEFT_ALIGN, 3);
StringExpandPlaceholders(gStringVar4, gUnknown_8458DBC); StringExpandPlaceholders(gStringVar4, gUnknown_8458DBC);
} }
sub_8118664(44, gStringVar4); sub_8118664(44, gStringVar4);
@@ -4199,7 +4199,7 @@ static void sub_811ACA4(u8 windowId, s32 itemId, u8 y)
if (itemId == -3 && y == gUnknown_8456F7C.upText_Y) if (itemId == -3 && y == gUnknown_8456F7C.upText_Y)
{ {
rfu = sub_80F9800(); rfu = GetHostRFUtgtGname();
if (rfu->species != SPECIES_NONE) if (rfu->species != SPECIES_NONE)
{ {
sub_811ABE4(windowId, y, rfu, gSaveBlock2Ptr->playerName, 5); sub_811ABE4(windowId, y, rfu, gSaveBlock2Ptr->playerName, 5);