diff options
author | GriffinR <griffin.g.richards@gmail.com> | 2020-06-08 00:45:06 -0400 |
---|---|---|
committer | GriffinR <griffin.g.richards@gmail.com> | 2020-06-08 15:24:25 -0400 |
commit | 35867f531bbcfaf360045160734a1ff09ce0f6d8 (patch) | |
tree | 91ab76846dd79dd2df56e49f309dcb56142ea767 /src/link_rfu_2.c | |
parent | c98342c9730175e57c0cf242292d5ccad61b471d (diff) |
Some link rfu cleanup / link.c documentation
Diffstat (limited to 'src/link_rfu_2.c')
-rw-r--r-- | src/link_rfu_2.c | 190 |
1 files changed, 102 insertions, 88 deletions
diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 6c6f12077..ac1488167 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -28,17 +28,31 @@ struct SioInfo u8 filler[92]; }; +struct RfuDebug +{ + u8 filler0[6]; + u16 unk_06; + u8 filler1[6]; + vu8 unk_0e; + u8 unk_0f; + u8 filler2[84]; + u16 unk_64; + u8 filler3[29]; + u8 unk_83; + u8 filler4[88]; +}; + u32 gf_rfu_REQ_api[RFU_API_BUFF_SIZE_RAM / 4]; struct GFRfuManager Rfu; -BSS_DATA u8 gUnknown_03000D78[8]; -BSS_DATA u8 sResendBlock8[16]; -BSS_DATA u16 sResendBlock16[8]; +static u8 sHeldKeyCount; +static u8 sResendBlock8[16]; +static u16 sResendBlock16[8]; EWRAM_DATA struct GFtgtGname gHostRFUtgtGnameBuffer = {}; -EWRAM_DATA ALIGNED(2) u8 gHostRFUtgtUnameBuffer[PLAYER_NAME_LENGTH + 1] = {}; -EWRAM_DATA INIT_PARAM sRfuReqConfig = {}; -EWRAM_DATA struct UnkLinkRfuStruct_02022B44 gUnknown_02022B44 = {}; +EWRAM_DATA u8 gHostRFUtgtUnameBuffer[PLAYER_NAME_LENGTH + 1] = {}; +static EWRAM_DATA INIT_PARAM sRfuReqConfig = {}; +static EWRAM_DATA struct RfuDebug sRfuDebug = {}; static void ResetSendDataManager(struct RfuBlockSend *); static void sub_800EAB4(void); @@ -146,8 +160,8 @@ static const struct { }; static const u16 sAcceptedSerialNos[] = { - 0x0002, // Pokemon FR/LG/EM - 0x7f7d, + 0x0002, + RFU_SERIAL_7F7D, 0x0000, 0xFFFF }; @@ -225,11 +239,11 @@ void ResetLinkRfuGFLayer(void) { Rfu.errorState = 0; } - for (i = 0; i < 5; i++) + for (i = 0; i < MAX_RFU_PLAYERS; i++) { - ResetSendDataManager(Rfu.unk_80 + i); + ResetSendDataManager(&Rfu.recvBlock[i]); } - ResetSendDataManager(&Rfu.unk_6c); + ResetSendDataManager(&Rfu.sendBlock); RfuRecvQueue_Reset(&Rfu.recvQueue); RfuSendQueue_Reset(&Rfu.sendQueue); CpuFill16(0, gSendCmd, sizeof gSendCmd); @@ -241,7 +255,7 @@ void InitRFU(void) { IntrFunc serialIntr = gIntrTable[1]; IntrFunc timerIntr = gIntrTable[2]; - sub_800E700(); + InitRFUAPI(); rfu_REQ_stopMode(); rfu_waitREQComplete(); REG_IME = 0; @@ -250,12 +264,12 @@ void InitRFU(void) REG_IME = INTR_FLAG_VBLANK; } -void sub_800E700(void) +void InitRFUAPI(void) { if (!rfu_initializeAPI((void *)gf_rfu_REQ_api, sizeof gf_rfu_REQ_api, gIntrTable + 1, TRUE)) { gLinkType = 0; - sub_800AAF4(); + ClearSavedLinkPlayers(); sub_80111B0(FALSE); ResetLinkRfuGFLayer(); rfu_setTimerInterrupt(3, gIntrTable + 2); @@ -288,7 +302,7 @@ static void Task_LinkLeaderSearchForChildren(u8 taskId) case 5: break; case 18: - Rfu.unk_cdb = 0; + Rfu.unk_cdb = FALSE; rfu_LMAN_setMSCCallback(sub_800EDBC); sub_800EAB4(); sub_800EAFC(); @@ -392,10 +406,10 @@ static void Task_JoinGroupSearchForParent(u8 taskId) rfu_UNI_setSendData(bmChildSlot, Rfu.unk_4c, sizeof(Rfu.unk_4c)); gTasks[taskId].data[1] = 8; DestroyTask(taskId); - if (gUnknown_02022B44.unk_0f == 0) + if (sRfuDebug.unk_0f == 0) { Debug_PrintEmpty(); - gUnknown_02022B44.unk_0f++; + sRfuDebug.unk_0f++; } CreateTask(sub_801084C, 5); break; @@ -474,7 +488,7 @@ static void Task_LinkRfu_UnionRoomListen(u8 taskId) case 15: break; case 16: - Rfu.unk_cdb = 0; + Rfu.unk_cdb = FALSE; rfu_LMAN_setMSCCallback(sub_800EDBC); UpdateGameData_GroupLockedIn(TRUE); sub_800EAB4(); @@ -513,7 +527,7 @@ static void sub_800ED34(u16 unused) { Rfu.unk_cd0++; RfuRecvQueue_Enqueue(&Rfu.recvQueue, Rfu.unk_c3f); - gUnknown_02022B44.unk_06++; + sRfuDebug.unk_06++; UpdateBackupQueue(); rfu_UNI_readySendData(Rfu.childSlot); rfu_UNI_clearRecvNewDataFlag(Rfu.childSlot); @@ -523,7 +537,7 @@ static void sub_800ED34(u16 unused) static void sub_800EDBC(u16 unused) { - Rfu.unk_cdb = 1; + Rfu.unk_cdb = TRUE; } void LinkRfu_Shutdown(void) @@ -657,11 +671,11 @@ static void sub_800EFB0(void) static void sub_800F014(void) { s32 i; - for (i = 0; i < 7; i++) + for (i = 0; i < CMD_LENGTH - 1; i++) { gRecvCmds[0][i] = gSendCmd[i]; } - for (i = 0; i < 7; i++) + for (i = 0; i < CMD_LENGTH - 1; i++) { gSendCmd[i] = 0; } @@ -695,9 +709,9 @@ bool32 IsRfuRecvQueueEmpty(void) { return FALSE; } - for (i = 0; i < 5; i++) + for (i = 0; i < MAX_RFU_PLAYERS; i++) { - for (j = 0; j < 7; j++) + for (j = 0; j < CMD_LENGTH - 1; j++) { if (gRecvCmds[i][j] != 0) { @@ -718,7 +732,7 @@ static bool32 sub_800F0F8(void) } else { - Rfu.unk_cdb = 0; + Rfu.unk_cdb = FALSE; if ((Rfu.unk_ce2 & gRfuLinkStatus->connSlotFlag) == Rfu.unk_ce2 && (Rfu.unk_ce2 & gRfuLinkStatus->connSlotFlag)) { if (!Rfu.unk_cdc) @@ -748,7 +762,7 @@ static bool32 sub_800F0F8(void) { rfu_REQ_PARENT_resumeRetransmitAndChange(); } - Rfu.unk_0e = 1; + Rfu.unk_0e = TRUE; } } return FALSE; @@ -762,10 +776,10 @@ static bool32 sub_800F1E0(void) u16 j; u8 retval; - if (Rfu.state >= 20 && Rfu.unk_0e == 1) + if (Rfu.state >= 20 && Rfu.unk_0e == TRUE) { rfu_waitREQComplete(); - while (Rfu.unk_cdb == 0) + while (Rfu.unk_cdb == FALSE) { if (Rfu.errorState != 0) { @@ -776,8 +790,8 @@ static bool32 sub_800F1E0(void) rfu_waitREQComplete(); if ((lman.parentAck_flag & Rfu.unk_ce2) == Rfu.unk_ce2) { - Rfu.unk_cdc = 0; - gUnknown_02022B44.unk_06++; + Rfu.unk_cdc = FALSE; + sRfuDebug.unk_06++; flags = lman.acceptSlot_flag; for (i = 0; i < RFU_CHILD_MAX; i++) { @@ -813,7 +827,7 @@ static bool32 sub_800F1E0(void) CallRfuFunc(); if (Rfu.unk_ce5 && !Rfu.unk_cd9) { - gUnknown_02022B44.unk_0e = 0; + sRfuDebug.unk_0e = FALSE; rfu_clearSlot(TYPE_UNI_SEND | TYPE_UNI_RECV, Rfu.unk_cda); for (i = 0; i < RFU_CHILD_MAX; i++) { @@ -833,10 +847,10 @@ static bool32 sub_800F1E0(void) } else { - Rfu.unk_cdc = 1; - Rfu.unk_0e = 0; + Rfu.unk_cdc = TRUE; + Rfu.unk_0e = FALSE; } - Rfu.unk_0e = 0; + Rfu.unk_0e = FALSE; } retval = Rfu.unk_cdc; return gRfuLinkStatus->sendSlotUNIFlag ? retval & 1 : FALSE; @@ -914,8 +928,8 @@ static void HandleSendFailure(u8 unused, u32 flags) { s32 i, j; - const u8 *r10 = Rfu.unk_6c.payload; - for (i = 0; i < Rfu.unk_6c.count; i++) + const u8 *r10 = Rfu.sendBlock.payload; + for (i = 0; i < Rfu.sendBlock.count; i++) { if (!(flags & 1)) { @@ -932,7 +946,7 @@ static void HandleSendFailure(u8 unused, u32 flags) j++;j--; // Needed to match; } RfuSendQueue_Enqueue(&Rfu.sendQueue, sResendBlock8); - Rfu.unk_6c.failedFlags |= (1 << i); + Rfu.sendBlock.failedFlags |= (1 << i); } flags >>= 1; } @@ -949,7 +963,7 @@ void Rfu_SetBlockReceivedFlag(u8 linkPlayerId) void Rfu_ResetBlockReceivedFlag(u8 linkPlayerId) { Rfu.blockReceived[linkPlayerId] = FALSE; - Rfu.unk_80[linkPlayerId].receiving = 0; + Rfu.recvBlock[linkPlayerId].receiving = 0; } static u8 sub_800F74C(const u8 *a0) @@ -971,8 +985,8 @@ static void RfuFunc_SendKeysToRfu(void) && gHeldKeyCodeToSend != LINK_KEY_CODE_NULL && gLinkTransferringData != TRUE) { - gUnknown_03000D78[0]++; - gHeldKeyCodeToSend |= (gUnknown_03000D78[0] << 8); + sHeldKeyCount++; + gHeldKeyCodeToSend |= (sHeldKeyCount << 8); RfuPrepareSendBuffer(RFU_COMMAND_0xBE00); } } @@ -1032,28 +1046,28 @@ static void RfuHandleReceiveCommand(u8 unused) } break; case RFU_COMMAND_0x8800: - if (Rfu.unk_80[i].receiving == 0) + if (Rfu.recvBlock[i].receiving == 0) { - Rfu.unk_80[i].next = 0; - Rfu.unk_80[i].count = gRecvCmds[i][1]; - Rfu.unk_80[i].owner = gRecvCmds[i][2]; - Rfu.unk_80[i].receivedFlags = 0; - Rfu.unk_80[i].receiving = 1; + Rfu.recvBlock[i].next = 0; + Rfu.recvBlock[i].count = gRecvCmds[i][1]; + Rfu.recvBlock[i].owner = gRecvCmds[i][2]; + Rfu.recvBlock[i].receivedFlags = 0; + Rfu.recvBlock[i].receiving = 1; Rfu.blockReceived[i] = FALSE; } break; case RFU_COMMAND_0x8900: - if (Rfu.unk_80[i].receiving == 1) + if (Rfu.recvBlock[i].receiving == 1) { - Rfu.unk_80[i].next = gRecvCmds[i][0] & 0xff; - Rfu.unk_80[i].receivedFlags |= (1 << Rfu.unk_80[i].next); + Rfu.recvBlock[i].next = gRecvCmds[i][0] & 0xff; + Rfu.recvBlock[i].receivedFlags |= (1 << Rfu.recvBlock[i].next); for (j = 0; j < 6; j++) - gBlockRecvBuffer[i][Rfu.unk_80[i].next * 6 + j] = gRecvCmds[i][j + 1]; - if (Rfu.unk_80[i].receivedFlags == sAllBlocksReceived[Rfu.unk_80[i].count]) + gBlockRecvBuffer[i][Rfu.recvBlock[i].next * 6 + j] = gRecvCmds[i][j + 1]; + if (Rfu.recvBlock[i].receivedFlags == sAllBlocksReceived[Rfu.recvBlock[i].count]) { - Rfu.unk_80[i].receiving = 2; + Rfu.recvBlock[i].receiving = 2; Rfu_SetBlockReceivedFlag(i); - if (GetHostRFUtgtGname()->activity == 0x45 && gReceivedRemoteLinkPlayers != 0 && Rfu.parentChild == MODE_CHILD) + if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM) && gReceivedRemoteLinkPlayers != 0 && Rfu.parentChild == MODE_CHILD) ValidateAndReceivePokemonSioInfo(gBlockRecvBuffer); } } @@ -1123,7 +1137,7 @@ static bool8 AreNoPlayersReceiving(void) for (i = 0; i < MAX_RFU_PLAYERS; i++) { - if (Rfu.unk_80[i].receiving) + if (Rfu.recvBlock[i].receiving) return FALSE; } return TRUE; @@ -1135,7 +1149,7 @@ static bool8 sub_800FC88(void) for (i = 0; i < Rfu.playerCount; i++) { - if (Rfu.unk_80[i].receiving != 2 || Rfu.blockReceived[i] != TRUE) + if (Rfu.recvBlock[i].receiving != 2 || Rfu.blockReceived[i] != TRUE) return FALSE; } return TRUE; @@ -1159,7 +1173,7 @@ u8 Rfu_GetBlockReceivedStatus(void) for (i = 0; i < MAX_RFU_PLAYERS; i++) { - if (Rfu.unk_80[i].receiving == 2 && Rfu.blockReceived[i] == TRUE) + if (Rfu.recvBlock[i].receiving == 2 && Rfu.blockReceived[i] == TRUE) { flags |= (1 << i); } @@ -1177,8 +1191,8 @@ static void RfuPrepareSendBuffer(u16 command) switch (command) { case RFU_COMMAND_0x8800: - gSendCmd[1] = Rfu.unk_6c.count; - gSendCmd[2] = Rfu.unk_6c.owner + 0x80; + gSendCmd[1] = Rfu.sendBlock.count; + gSendCmd[2] = Rfu.sendBlock.owner + 0x80; break; case RFU_COMMAND_0xA100: if (AreNoPlayersReceiving()) @@ -1231,23 +1245,23 @@ bool32 Rfu_InitBlockSend(const u8 *src, size_t size) return FALSE; if (gSendCmd[0] != 0) return FALSE; - if (Rfu.unk_6c.sending) + if (Rfu.sendBlock.sending) { - gUnknown_02022B44.unk_83++; + sRfuDebug.unk_83++; return FALSE; } r4 = (size % 12) != 0; - Rfu.unk_6c.owner = GetMultiplayerId(); - Rfu.unk_6c.sending = TRUE; - Rfu.unk_6c.count = (size / 12) + r4; - Rfu.unk_6c.next = 0; + Rfu.sendBlock.owner = GetMultiplayerId(); + Rfu.sendBlock.sending = TRUE; + Rfu.sendBlock.count = (size / 12) + r4; + Rfu.sendBlock.next = 0; if (size > 0x100) - Rfu.unk_6c.payload = src; + Rfu.sendBlock.payload = src; else { if (src != gBlockSendBuffer) memcpy(gBlockSendBuffer, src, size); - Rfu.unk_6c.payload = gBlockSendBuffer; + Rfu.sendBlock.payload = gBlockSendBuffer; } RfuPrepareSendBuffer(RFU_COMMAND_0x8800); Rfu.callback = HandleBlockSend; @@ -1276,34 +1290,34 @@ static void HandleBlockSend(void) static void SendNextBlock(void) { s32 i; - const u8 *src = Rfu.unk_6c.payload; - gSendCmd[0] = RFU_COMMAND_0x8900 | Rfu.unk_6c.next; - for (i = 0; i < 7; i++) - gSendCmd[i + 1] = (src[(i << 1) + Rfu.unk_6c.next * 12 + 1] << 8) | src[(i << 1) + Rfu.unk_6c.next * 12 + 0]; - Rfu.unk_6c.next++; - if (Rfu.unk_6c.count <= Rfu.unk_6c.next) - { - Rfu.unk_6c.sending = FALSE; + const u8 *src = Rfu.sendBlock.payload; + gSendCmd[0] = RFU_COMMAND_0x8900 | Rfu.sendBlock.next; + for (i = 0; i < CMD_LENGTH - 1; i++) + gSendCmd[i + 1] = (src[(i << 1) + Rfu.sendBlock.next * 12 + 1] << 8) | src[(i << 1) + Rfu.sendBlock.next * 12 + 0]; + Rfu.sendBlock.next++; + if (Rfu.sendBlock.count <= Rfu.sendBlock.next) + { + Rfu.sendBlock.sending = FALSE; Rfu.callback = SendLastBlock; } } static void SendLastBlock(void) { - const u8 *src = Rfu.unk_6c.payload; + const u8 *src = Rfu.sendBlock.payload; u8 mpId = GetMultiplayerId(); s32 i; if (Rfu.parentChild == MODE_CHILD) { - gSendCmd[0] = RFU_COMMAND_0x8900 | (Rfu.unk_6c.count - 1); - for (i = 0; i < 7; i++) - 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) + gSendCmd[0] = RFU_COMMAND_0x8900 | (Rfu.sendBlock.count - 1); + for (i = 0; i < CMD_LENGTH - 1; i++) + gSendCmd[i + 1] = (src[(i << 1) + (Rfu.sendBlock.count - 1) * 12 + 1] << 8) | src[(i << 1) + (Rfu.sendBlock.count - 1) * 12 + 0]; + if ((u8)gRecvCmds[mpId][0] == Rfu.sendBlock.count - 1) { - if (Rfu.unk_80[mpId].receivedFlags != sAllBlocksReceived[Rfu.unk_80[mpId].count]) + if (Rfu.recvBlock[mpId].receivedFlags != sAllBlocksReceived[Rfu.recvBlock[mpId].count]) { - HandleSendFailure(mpId, Rfu.unk_80[mpId].receivedFlags); - gUnknown_02022B44.unk_64++; + HandleSendFailure(mpId, Rfu.recvBlock[mpId].receivedFlags); + sRfuDebug.unk_64++; } else Rfu.callback = NULL; @@ -1898,7 +1912,7 @@ static void RfuCheckErrorStatus(void) gWirelessCommType = 2; SetMainCallback2(CB2_LinkError); gMain.savedCallback = CB2_LinkError; - sub_800AF18((Rfu.linkmanMsg << 16) | (Rfu.unk_10 << 8) | Rfu.unk_12, Rfu.recvQueue.count, Rfu.sendQueue.count, RfuGetErrorStatus() == 2); + BufferLinkErrorInfo((Rfu.linkmanMsg << 16) | (Rfu.unk_10 << 8) | Rfu.unk_12, Rfu.recvQueue.count, Rfu.sendQueue.count, RfuGetErrorStatus() == 2); Rfu.errorState = 2; CloseLink(); } @@ -1964,7 +1978,7 @@ static void CopyPlayerNameToUnameBuffer(void) void ClearAndInitHostRFUtgtGname(void) { memset(&gHostRFUtgtGnameBuffer, 0, RFU_GAME_NAME_LENGTH); - InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, 0, FALSE, 0); + InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, ACTIVITY_NONE, FALSE, 0); } void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, u32 started) @@ -2160,7 +2174,7 @@ static void sub_801120C(u8 msg, u8 paramCount) case LMAN_MSG_RFU_FATAL_ERROR: GetLinkmanErrorParams(msg); RfuSetErrorStatus(1, msg); - Rfu.unk_cdb = 1; + Rfu.unk_cdb = TRUE; break; } } @@ -2231,7 +2245,7 @@ void sub_8011404(u8 msg, u8 unused1) case LMAN_MSG_RFU_FATAL_ERROR: RfuSetErrorStatus(1, msg); GetLinkmanErrorParams(msg); - Rfu.unk_cdb = 1; + Rfu.unk_cdb = TRUE; break; } } @@ -2304,7 +2318,7 @@ static void sub_8011674(u8 msg, u8 paramCount) Rfu.unk_ce4 = 2; } } - else if (GetHostRFUtgtGname()->activity == 0x54) + else if (GetHostRFUtgtGname()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM)) { rfu_REQ_disconnect(lman.acceptSlot_flag); rfu_waitREQComplete(); @@ -2408,7 +2422,7 @@ static void sub_8011674(u8 msg, u8 paramCount) case LMAN_MSG_RFU_FATAL_ERROR: GetLinkmanErrorParams(msg); RfuSetErrorStatus(1, msg); - Rfu.unk_cdb = 0; + Rfu.unk_cdb = FALSE; break; } } |