diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/link.c | 2 | ||||
-rw-r--r-- | src/link_rfu.c | 1288 | ||||
-rw-r--r-- | src/link_rfu_2.c | 178 | ||||
-rw-r--r-- | src/link_rfu_3.c | 2 |
4 files changed, 736 insertions, 734 deletions
diff --git a/src/link.c b/src/link.c index dfb21f126..7ff518297 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(); diff --git a/src/link_rfu.c b/src/link_rfu.c index 8ab76ffd5..251c230ce 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -2,189 +2,187 @@ #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 a0); +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 a0, u8 a1); +static void rfu_LMAN_disconnect(u8 bmDisconnectSlot); +static void rfu_LMAN_reflectCommunicationStatus(u8 a0); +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 != 0x17 && lman.state != 0x01) { - gUnknown_3005E10.unk_05 = 0; - gUnknown_3005E10.unk_04 = 0; + lman.state = lman.next_state = 0; } - 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 == TRUE) 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 = 1; + lman.next_state = 2; + 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 = 0; + 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 != 0 && (lman.state != LMAN_STATE_WAIT_RECV_CHILD_NAME || parent_child != 1)) { - gUnknown_3005E10.unk_14 = 1; - sub_80FE7F0(0xf3, 0x01); + lman.param[0] = 1; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 0x01); return 1; } if (rfu_getMasterSlave() == AGB_CLK_SLAVE) { - gUnknown_3005E10.unk_14 = 2; - sub_80FE7F0(0xf3, 0x01); + lman.param[0] = 2; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 0x01); return 2; } - 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); + lman.param[0] = 4; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 0x01); return 4; } - 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 = 5; } else { - gUnknown_3005E10.unk_04 = 9; - if (gUnknown_3005E10.unk_0b) + lman.state = 9; + 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 != 0 && (lman.state < 9 || lman.state > 11)) { - gUnknown_3005E10.unk_14 = 1; - sub_80FE7F0(0xF3, 0x01); + lman.param[0] = 1; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 0x01); return 1; } if (rfu_getMasterSlave() == AGB_CLK_SLAVE) { - gUnknown_3005E10.unk_14 = 2; - sub_80FE7F0(0xF3, 0x01); + lman.param[0] = 2; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 0x01); return 2; } for (i = 0; i < gRfuLinkStatus->findParentCount; i++) @@ -196,546 +194,550 @@ u8 sub_80FD610(u16 parentId, u16 unk_1a) } if (gRfuLinkStatus->findParentCount == 0 || i == gRfuLinkStatus->findParentCount) { - gUnknown_3005E10.unk_14 = 3; - sub_80FE7F0(0xF3, 0x01); + lman.param[0] = 3; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 0x01); return 3; } - if (gUnknown_3005E10.unk_04 == 0 || gUnknown_3005E10.unk_04 == 9) + if (lman.state == 0 || lman.state == 9) { - gUnknown_3005E10.unk_04 = 12; - gUnknown_3005E10.unk_05 = 13; + lman.state = 12; + lman.next_state = 13; } else { - gUnknown_3005E10.unk_04 = 11; - gUnknown_3005E10.unk_05 = 12; + lman.state = 11; + lman.next_state = 12; } - 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 ((bm_targetSlot >> i) & 1) { - if ((lossSlot >> i) & 1) - { - gUnknown_3005E10.unk_34[i] = 0; - } + lman.linkRecoveryTimer.count[i] = 0; } - i = gRfuLinkStatus->linkLossSlotFlag & lossSlot; - if (i) - { - sub_80FE818(i); - } - 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 = 23; + 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 5: + lman.state = 8; + lman.next_state = 0; + msg = LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED; + break; + case 6: + lman.state = 7; + lman.next_state = 8; + break; + case 7: + lman.state = 7; + lman.next_state = 8; + break; + case 8: + break; + case 9: + lman.state = lman.next_state = 0; + msg = LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED; + break; + case 10: + lman.state = 11; + lman.next_state = 0; + break; + case 11: + lman.state = 11; + lman.next_state = 0; + break; + case 12: + lman.state = lman.next_state = 0; + msg = LMAN_MSG_CONNECT_PARENT_FAILED; + break; + case 13: + lman.state = 14; + break; + case 14: + lman.state = 14; + break; + case 15: + break; + case 16: + 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, 0x01); + return; + case 17: + lman.state = 18; + break; + case 18: + lman.state = 18; + break; + default: + lman.state = lman.next_state = 0; + msg = LMAN_MSG_MANAGER_STOPPED; + break; + } + if (lman.state == 0) + { + 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(0x31, 0x01); } 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, 0x01); } } else { - sub_80FE818(bmLinkLossSlot); - retVal = TRUE; - sub_80FE7F0(0x30, 0x02); + rfu_LMAN_disconnect(bm_linkLossSlot); + disconnect_occure_flag = TRUE; + rfu_LMAN_occureCallback(0x30, 0x02); } - 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(0x32, 0x01); } - 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, 0x01); } } - 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(0xF1, 0x00); + 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 != 0) { - gUnknown_3005E10.unk_04 = 0; + lman.state = 0; + 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 != 0) { - 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 23: + 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; + } + else + { + msg=LMAN_MSG_RFU_FATAL_ERROR; + } + lman.state = lman.next_state = 0; + rfu_LMAN_occureCallback(msg, 0); + break; + case 1: + if (rfu_LMAN_REQBN_softReset_and_checkID() == RFU_ID) + { + lman.state = lman.next_state; + lman.next_state = 3; + } + else + { + lman.state = lman.next_state = 0; + rfu_LMAN_occureCallback(LMAN_MSG_RFU_FATAL_ERROR, 0); } - rfu_waitREQComplete(); - gUnknown_3005E10.unk_0e = 0; + break; + case 2: + rfu_REQ_reset(); + break; + case 3: + rfu_REQ_configSystem(lman.init_param->availSlot_flag, lman.init_param->maxMFrame, lman.init_param->MC_TimerCount); + break; + case 4: + rfu_REQ_configGameData(lman.init_param->mboot_flag, lman.init_param->serialNo, (const u8 *)lman.init_param->gameName, lman.init_param->userName); + 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(lman.work); + 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; + 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 = 5; + 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 = 5; + 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 = 9; } } -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 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 = 4; } 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 = 0; } 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 = 0; + rfu_LMAN_occureCallback(0x00, 0x00); } break; case ID_SC_START_REQ: if (reqResult == 0) { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 6; + lman.state = lman.next_state = 6; } 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 = 7; + lman.next_state = 8; } 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 = 0; + if (lman.pcswitch_flag == 0) { - sub_80FE7F0(0x13, 0x00); + rfu_LMAN_occureCallback(0x13, 0x00); } } 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 = 10; } break; case ID_SP_POLL_REQ: if (reqResult == 0) { - sp0 = sub_80FE778(); - gUnknown_3005E10.unk_14 = sp0; + sp0 = rfu_LMAN_CHILD_checkEnableParentCandidate(); + lman.param[0] = sp0; if (sp0) { - sub_80FE7F0(0x20, 0x01); + rfu_LMAN_occureCallback(0x20, 0x01); } - 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 = 9; + 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 = 11; + lman.next_state = 0; } 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 == 0) { - sub_80FE7F0(0x21, 0x00); + rfu_LMAN_occureCallback(0x21, 0x00); } } - 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 = 5; + 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 = 13; } break; case ID_CP_POLL_REQ: - if (reqResult == 0 && !rfu_getConnectParentStatus(&sp0, &gUnknown_3005E10.unk_10) && !sp0) + if (reqResult == 0 && !rfu_getConnectParentStatus(&sp0, &lman.child_slot) && !sp0) { - gUnknown_3005E10.unk_04 = 14; + lman.state = 14; } - 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 = 14; } break; case ID_CP_END_REQ: - if (reqResult == 0 && !rfu_getConnectParentStatus(&sp0, &gUnknown_3005E10.unk_10)) + if (reqResult == 0 && !rfu_getConnectParentStatus(&sp0, &lman.child_slot)) { if (!sp0) { - 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 = 19; + lman.next_state = 15; + 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 = 0; + lman.work = 0x23; + lman.param[0] = sp0; + if (lman.pcswitch_flag) { - gUnknown_3005E10.unk_07 = 3; - gUnknown_3005E10.unk_04 = 9; + lman.pcswitch_flag = 3; + lman.state = 9; } } - 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 = 17; + 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; } @@ -745,11 +747,11 @@ static void sub_80FDC98(u16 reqCommandId, u16 reqResult) case ID_CPR_POLL_REQ: if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&sp0) && sp0 < 2) { - gUnknown_3005E10.unk_04 = 18; + lman.state = 18; } - 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 = 18; } break; case ID_CPR_END_REQ: @@ -757,50 +759,50 @@ static void sub_80FDC98(u16 reqCommandId, u16 reqResult) { if (!sp0) { - gUnknown_3005E10.unk_04 = 19; - gUnknown_3005E10.unk_05 = 22; - gUnknown_3005E10.unk_1e = 0x32; + lman.state = 19; + lman.next_state = 22; + 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 = 0; + 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 == 22) { - 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 = 1; + rfu_LMAN_occureCallback(0x41, 0x00); } - else if (gUnknown_3005E10.unk_05 == 15) + else if (lman.next_state == 15) { - 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); + lman.state = lman.next_state; + lman.childClockSlave_flag = 1; + rfu_LMAN_occureCallback(0x41, 0x00); + 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); tmp = &sp0; - *tmp = rfu_NI_CHILD_setSendGameName(gUnknown_3005E10.unk_10, 0x0e); + *tmp = rfu_NI_CHILD_setSendGameName(lman.child_slot, 0x0e); if (*tmp) { - 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 = 0; + rfu_LMAN_managerChangeAgbClockMaster(); + rfu_LMAN_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); + lman.param[0] = sp0; + rfu_LMAN_occureCallback(0x25, 0x01); } } } @@ -808,14 +810,14 @@ 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 = 0; + rfu_LMAN_occureCallback(0x42, 0x00); } 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(); @@ -825,7 +827,7 @@ static void sub_80FDC98(u16 reqCommandId, u16 reqResult) stwiRecvBuffer = rfu_getSTWIRecvBuffer()->rxPacketAlloc.rfuPacket8.data; stwiRecvBuffer[4] = gRfuLinkStatus->connSlotFlag; stwiRecvBuffer[5] = 1; - sub_80FD850(0x29); + rfu_LMAN_linkWatcher(0x29); reqResult = 0; } } @@ -835,130 +837,130 @@ static void sub_80FDC98(u16 reqCommandId, u16 reqResult) 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] = stwiRecvBuffer[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 = 0; } } - sp0 = gUnknown_3005E10.unk_00 & gUnknown_3005E10.unk_14; + sp0 = lman.acceptSlot_flag & lman.param[0]; for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((sp0 >> i) & 1 && gUnknown_3005E10.unk_01) + if ((sp0 >> 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 = 6; } - else if (gUnknown_3005E10.unk_04 != 6 && gUnknown_3005E10.unk_04 != 7) + else if (lman.state != 6 && lman.state != 7) { - gUnknown_3005E10.unk_07 = 1; - gUnknown_3005E10.unk_04 = 5; + lman.pcswitch_flag = 1; + lman.state = 5; } } } if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) { - if (gUnknown_3005E10.unk_04 == 0) + if (lman.state == 0) { - 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(0x40, 0x01); } } break; case ID_DATA_RX_REQ: - sub_80FE6F0(); + rfu_LMAN_CHILD_checkSendChildName2(); if (gRfuLinkStatus->parentChild != MODE_NEUTRAL) { - sub_80FE7F0(0x50, 0x00); + rfu_LMAN_occureCallback(0x50, 0x00); } 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(); + lman.reserveDisconnectSlot_flag = 0; + lman.acceptCount = 0; + lman.acceptSlot_flag = 0;; + lman.parent_child = MODE_NEUTRAL; + rfu_LMAN_managerChangeAgbClockMaster(); if (reqCommandId == 61) { - 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 = 0; } - sub_80FE7F0(0xf0, 0x02); - sub_80FEAF4(); + rfu_LMAN_occureCallback(0xf0, 0x02); + rfu_LMAN_managerChangeAgbClockMaster(); } } if (reqCommandId == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ) { - sub_80FE7F0(0xf2, 0x00); - sub_80FEAF4(); + rfu_LMAN_occureCallback(0xf2, 0x00); + rfu_LMAN_managerChangeAgbClockMaster(); } } -static void sub_80FE394(u16 reqCommandId) +static void rfu_LMAN_MSC_callback(u16 reqCommandId) { u8 r7; u8 ackFlag; - r7 = gUnknown_3005E10.unk_0e; - gUnknown_3005E10.unk_0e = 0; - gUnknown_3005E10.unk_0f = 1; + r7 = 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 != 1) { - sub_80FEAF4(); - gUnknown_3005E10.unk_0f = 0; - gUnknown_3005E10.unk_0e = r7; + rfu_LMAN_managerChangeAgbClockMaster(); + lman.msc_exe_flag = 0; + lman.active = r7; return; } } @@ -966,23 +968,23 @@ static void sub_80FE394(u16 reqCommandId) { if (!rfu_UNI_PARENT_getDRAC_ACK(&ackFlag)) { - gUnknown_3005E10.unk_03 |= ackFlag; + lman.parentAck_flag |= ackFlag; } } - 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 == 2) { - sub_80FEAF4(); + rfu_LMAN_managerChangeAgbClockMaster(); } } - gUnknown_3005E10.unk_0f = 0; - gUnknown_3005E10.unk_0e = r7; + lman.msc_exe_flag = 0; + lman.active = r7; } -static void sub_80FE418(void) +static void rfu_LMAN_PARENT_checkRecvChildName(void) { u8 flags; u8 sp0; @@ -991,14 +993,14 @@ static void sub_80FE418(void) u8 r4; 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 == 5 || lman.state == 6 || lman.state == 7 || lman.state == 8) { - flags = ((gRfuLinkStatus->connSlotFlag ^ gUnknown_3005E10.unk_0c) & gRfuLinkStatus->connSlotFlag) & ~gRfuLinkStatus->getNameFlag; - gUnknown_3005E10.unk_0c = gRfuLinkStatus->connSlotFlag; + flags = ((gRfuLinkStatus->connSlotFlag ^ lman.connectSlot_flag_old) & gRfuLinkStatus->connSlotFlag) & ~gRfuLinkStatus->getNameFlag; + lman.connectSlot_flag_old = gRfuLinkStatus->connSlotFlag; if (flags) { - gUnknown_3005E10.unk_14 = flags; - sub_80FE7F0(0x10, 0x01); + lman.param[0] = flags; + rfu_LMAN_occureCallback(0x10, 0x01); } sp0 = 0x00; for (i = 0; i < RFU_CHILD_MAX; i++) @@ -1007,22 +1009,22 @@ static void sub_80FE418(void) r5 = 0x00; if (flags & r4) { - 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 |= r4; } - else if (gUnknown_3005E10.unk_24 & r4) + else if (lman.nameAcceptTimer.active & r4) { 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++) + for (ptr = lman.acceptable_serialNo_list; *ptr != 0xFFFF; ptr++) { if (gRfuLinkStatus->partner[i].serialNo == *ptr) { - gUnknown_3005E10.unk_00 |= r4; - gUnknown_3005E10.unk_01++; + lman.acceptSlot_flag |= r4; + lman.acceptCount++; sp0 |= r4; r5 |= 0x01; break; @@ -1034,139 +1036,139 @@ static void sub_80FE418(void) } } } - else if (--gUnknown_3005E10.unk_28[i] == 0) + else if (--lman.nameAcceptTimer.count[i] == 0) { r5 = 0x06; } if (r5 & 0x02) { - gUnknown_3005E10.unk_24 &= ~r4; - gUnknown_3005E10.unk_28[i] = 0; + lman.nameAcceptTimer.active &= ~r4; + lman.nameAcceptTimer.count[i] = 0; rfu_clearSlot(TYPE_NI_RECV, i); } if (r5 & 0x04) { - gUnknown_3005E10.unk_0d |= r4; + lman.reserveDisconnectSlot_flag |= r4; } } } if (sp0) { - gUnknown_3005E10.unk_14 = sp0; - sub_80FE7F0(0x11, 0x01); + lman.param[0] = sp0; + rfu_LMAN_occureCallback(0x11, 0x01); } - 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)) + if (gRfuLinkStatus->sendSlotUNIFlag && ((lman.parentAck_flag & lman.acceptSlot_flag) != lman.acceptSlot_flag)) { r5 = 0x00; } if (r5) { - 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(0x12, 0x01); } } - if (gUnknown_3005E10.unk_24 == 0 && gUnknown_3005E10.unk_04 == 8) + if (lman.nameAcceptTimer.active == 0 && lman.state == 8) { - 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 = 0; + rfu_LMAN_occureCallback(0x14, 0x00); } 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 = 9; } else { - gUnknown_3005E10.unk_07 = 1; - gUnknown_3005E10.unk_04 = 5; + lman.pcswitch_flag = 1; + lman.state = 5; } - 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 = 5; } } } } } -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 == 15) { - 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 = 24; + 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 == 24) { - if (gUnknown_3005E10.unk_02 == 1) + if (lman.childClockSlave_flag == 1) { - sub_80FEB14(); + rfu_LMAN_requestChangeAgbClockMaster(); } - if (gUnknown_3005E10.unk_02 == 0) + if (lman.childClockSlave_flag == 0) { - 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 = 0; + rfu_LMAN_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); + lman.param[0] = 0; + rfu_LMAN_occureCallback(0x25, 0x01); } } } -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 == 15 && 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 = 0; + 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(0x24, 0x00); } } -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 = 16; + lman.next_state = 17; + 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 +1177,25 @@ static u8 sub_80FE778(void) return flags; } -static void sub_80FE7F0(u8 a0, u8 a1) +static void rfu_LMAN_occureCallback(u8 a0, u8 a1) { - if (gUnknown_3005E10.unk_40 != NULL) + if (lman.LMAN_callback != NULL) { - gUnknown_3005E10.unk_40(a0, a1); + lman.LMAN_callback(a0, a1); } - 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 a0) { - u8 unk_0e_bak = gUnknown_3005E10.unk_0e; - gUnknown_3005E10.unk_0e = 1; + u8 unk_0e_bak = lman.active; + lman.active = 1; rfu_REQ_disconnect(a0); rfu_waitREQComplete(); - gUnknown_3005E10.unk_0e = unk_0e_bak; + lman.active = unk_0e_bak; } -static void sub_80FE83C(u8 a0) +static void rfu_LMAN_reflectCommunicationStatus(u8 a0) { u8 i; @@ -1230,13 +1232,13 @@ static void sub_80FE83C(u8 a0) } } -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 +1249,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 +1265,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 +1274,109 @@ static void sub_80FE918(void) } } -void sub_80FEA10(void (*func)(u16)) +void rfu_LMAN_setMSCCallback(void (*func)(u16)) { - gUnknown_3005E10.unk_44 = func; - rfu_setMSCCallback(sub_80FE394); + lman.MSC_callback = func; + 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; } 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); + lman.param[0] = 6; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 0x01); return 6; } - 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 == 9 || lman.state == 10 || lman.state == 11) { - gUnknown_3005E10.unk_14 = 7; - sub_80FE7F0(0xf3, 0x01); + lman.param[0] = 7; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 0x01); return 7; } - 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) { - gUnknown_3005E10.unk_02 = 0; - sub_80FE7F0(0x45, 0x00); + lman.childClockSlave_flag = 0; + rfu_LMAN_occureCallback(0x45, 0x00); } } -void sub_80FEB14(void) +void rfu_LMAN_requestChangeAgbClockMaster(void) { - if (gUnknown_3005E10.unk_02 == 0) + if (lman.childClockSlave_flag == 0) { - sub_80FE7F0(0x45, 0x00); + rfu_LMAN_occureCallback(0x45, 0x00); } - else if (gUnknown_3005E10.unk_02 == 1) + else if (lman.childClockSlave_flag == 1) { - gUnknown_3005E10.unk_02 = 2; + lman.childClockSlave_flag = 2; } } -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; + lman.pcswitch_flag = 3; + lman.state = 9; break; case 6: - gUnknown_3005E10.unk_07 = 2; - gUnknown_3005E10.unk_1a = 1; + lman.pcswitch_flag = 2; + lman.connect_period = 1; break; case 7: case 8: - gUnknown_3005E10.unk_07 = 2; + lman.pcswitch_flag = 2; break; case 9: case 10: - gUnknown_3005E10.unk_1a = 40; + lman.connect_period = 40; break; case 11: - gUnknown_3005E10.unk_1a = 40; - gUnknown_3005E10.unk_04 = 10; + lman.connect_period = 40; + lman.state = 10; break; } } diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index a27948650..a876dd125 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -21,7 +21,7 @@ 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; @@ -61,18 +61,18 @@ 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[] = { @@ -233,28 +233,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*)gUnknown_843EC8C); 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 +319,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*)gUnknown_843EC8C); Rfu.unk_04 = 7; gTasks[taskId].data[1] = 7; break; @@ -343,7 +343,7 @@ static void sub_80F893C(u8 taskId) break; case 6: case 9: - sub_80FEB14(); + rfu_LMAN_requestChangeAgbClockMaster(); Rfu.unk_ce4 = 2; DestroyTask(taskId); break; @@ -371,7 +371,7 @@ static void sub_80F893C(u8 taskId) static void sub_80F8AA4(void) { u8 i; - u8 r5 = gUnknown_3005E10.unk_00; + u8 r5 = lman.acceptSlot_flag; for (i = 0; i < RFU_CHILD_MAX; i++) { if (r5 & 1) @@ -385,7 +385,7 @@ static void sub_80F8AA4(void) static void sub_80F8AEC(void) { - u8 r5 = gUnknown_3005E10.unk_00; + u8 r5 = lman.acceptSlot_flag; rfu_UNI_setSendData(r5, Rfu.unk_c87, sizeof(Rfu.unk_c87)); Rfu.unk_cda = sub_80F886C(r5); Rfu.unk_ce2 = r5; @@ -397,22 +397,22 @@ static void sub_80F8B34(u8 taskId) { if (sub_80F9800()->unk_0a_0 == 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*)gUnknown_843EC8C); + rfu_LMAN_setMSCCallback(sub_80F8D20); Rfu.unk_04 = 18; break; case 18: @@ -433,14 +433,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 +456,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*)gUnknown_843EC8C); } void sub_80F8D14(void) { - sub_80FD760(FALSE); + rfu_LMAN_stopManager(FALSE); } static void sub_80F8D20(u16 unused) @@ -483,7 +483,7 @@ static void sub_80F8D20(u16 unused) rfu_UNI_readySendData(Rfu.unk_c3e); rfu_UNI_clearRecvNewDataFlag(Rfu.unk_c3e); } - LinkRfu_REQ_SendData_HandleParentRelationship(TRUE); + rfu_LMAN_REQ_sendData(TRUE); } static void sub_80F8DA8(u16 unused) @@ -498,7 +498,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 +550,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 +567,7 @@ static void sub_80F8F10(void) bool8 sub_80F8F40(void) { - if (gUnknown_3005E10.unk_00) + if (lman.acceptSlot_flag) { return TRUE; } @@ -577,7 +577,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) @@ -688,7 +688,7 @@ static bool32 sub_80F911C(void) { rfu_REQ_recvData(); rfu_waitREQComplete(); - LinkRfu_REQ_SendData_HandleParentRelationship(FALSE); + rfu_LMAN_REQ_sendData(FALSE); } else { @@ -707,7 +707,7 @@ static bool32 sub_80F911C(void) sub_80FB0E8(0x8000); return FALSE; } - if (!gUnknown_3005E10.unk_00) + if (!lman.acceptSlot_flag) { sub_80F8DC0(); gReceivedRemoteLinkPlayers = 0; @@ -716,7 +716,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 { @@ -748,11 +748,11 @@ static bool32 sub_80F9204(void) } rfu_REQ_recvData(); rfu_waitREQComplete(); - if ((gUnknown_3005E10.unk_03 & Rfu.unk_ce2) == Rfu.unk_ce2) + if ((lman.parentAck_flag & Rfu.unk_ce2) == Rfu.unk_ce2) { 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) @@ -854,7 +854,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(); @@ -869,7 +869,7 @@ static bool32 sub_80F9514(void) sub_80FB9E4(2, 0x9000); sub_80FB0E8(0x9000); } - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; + lman.state = lman.next_state = 0; Rfu.unk_ce4 = 0; } if (Rfu.unk_cd0) @@ -1038,7 +1038,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]; @@ -1280,7 +1280,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 +1297,7 @@ static void sub_80FA160(void) { if (Rfu.unk_0c == 0) { - sub_80FEB14(); + rfu_LMAN_requestChangeAgbClockMaster(); Rfu.unk_ce4 = 2; } else @@ -1306,7 +1306,7 @@ 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; } @@ -1453,15 +1453,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) @@ -1682,7 +1682,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++) @@ -1842,7 +1842,7 @@ static void sub_80FACF0(u8 taskId) static void sub_80FAD98(void) { - if (Rfu.unk_ee == 1 && gUnknown_3005E10.unk_02 == 0) + if (Rfu.unk_ee == 1 && lman.childClockSlave_flag == 0) { if (gMain.callback2 == c2_mystery_gift_e_reader_run) gWirelessCommType = 2; @@ -1854,8 +1854,8 @@ static void sub_80FAD98(void) } else if (Rfu.unk_9e8.unk_233 == 1 || Rfu.unk_124.unk_8c3 == 1) { - if (gUnknown_3005E10.unk_02) - sub_80FEB14(); + if (lman.childClockSlave_flag) + rfu_LMAN_requestChangeAgbClockMaster(); sub_80FB9E4(1, 0x7000); sub_80FB0E8(0x7000); } @@ -1863,11 +1863,11 @@ static void sub_80FAD98(void) 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(0); } } @@ -1875,7 +1875,7 @@ bool32 sub_80FAE94(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) @@ -1979,8 +1979,8 @@ static void sub_80FB0E8(u32 a0) { if (Rfu.unk_ee == 0) { - Rfu.unk_10 = gUnknown_3005E10.unk_14; - Rfu.unk_12 = gUnknown_3005E10.unk_16; + Rfu.unk_10 = lman.param[0]; + Rfu.unk_12 = lman.param[1]; Rfu.unk_0a = a0; Rfu.unk_ee = 1; } @@ -2001,7 +2001,7 @@ void sub_80FB128(bool32 a0) static void sub_80FB154(void) { - sub_80FBE20(gUnknown_3005E10.unk_00, 1); + sub_80FBE20(lman.acceptSlot_flag, 1); Rfu.RfuFunc = NULL; } @@ -2022,10 +2022,10 @@ static void sub_80FB184(u8 a0, u8 unused1) case 0x10: break; case 0x11: - sub_80FB564(gUnknown_3005E10.unk_14); + 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) @@ -2051,9 +2051,9 @@ static void sub_80FB184(u8 a0, u8 unused1) case 0x13: break; case 0x14: - if (Rfu.unk_ce7 != gUnknown_3005E10.unk_00) + 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; @@ -2067,7 +2067,7 @@ static void sub_80FB184(u8 a0, u8 unused1) case 0x30: case 0x33: Rfu.unk_f0 = 4; - Rfu.unk_ce2 &= ~gUnknown_3005E10.unk_14; + Rfu.unk_ce2 &= ~lman.param[0]; if (gReceivedRemoteLinkPlayers == 1) { if (Rfu.unk_ce2 == 0) @@ -2105,12 +2105,12 @@ static void sub_80FB37C(u8 a0, u8 unused1) Rfu.unk_04 = 6; break; case 0x20: - Rfu.unk_ccd = gUnknown_3005E10.unk_14; + Rfu.unk_ccd = lman.param[0]; break; case 0x21: break; case 0x22: - Rfu.unk_c3e = gUnknown_3005E10.unk_14; + Rfu.unk_c3e = lman.param[0]; break; case 0x23: sub_80FB9E4(2, a0); @@ -2211,7 +2211,7 @@ static void sub_80FB5EC(u8 a0, u8 unused1) case 0x11: if (sub_80F9800()->unk_0a_0 == 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,40 +2226,40 @@ 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.unk_ce3 |= (idx ^ lman.param[0]); Rfu.unk_ce4 = 2; } } else if (sub_80F9800()->unk_0a_0 == 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: break; case 0x13: break; case 0x14: - if (sub_80F9800()->unk_0a_0 != 0x45 && gUnknown_3005E10.unk_01 > 1) + if (sub_80F9800()->unk_0a_0 != 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; + Rfu.unk_ccd = lman.param[0]; break; case 0x21: break; case 0x22: - Rfu.unk_c3e = gUnknown_3005E10.unk_14; + Rfu.unk_c3e = lman.param[0]; break; case 0x23: Rfu.unk_04 = 0x12; @@ -2282,7 +2282,7 @@ static void sub_80FB5EC(u8 a0, u8 unused1) sub_80FB9E4(2, a0); break; case 0x31: - if (gUnknown_3005E10.unk_00 & gUnknown_3005E10.unk_14) + if (lman.acceptSlot_flag & lman.param[0]) Rfu.unk_f0 = 1; break; case 0x32: @@ -2299,7 +2299,7 @@ static void sub_80FB5EC(u8 a0, u8 unused1) { if (gReceivedRemoteLinkPlayers == 1) { - Rfu.unk_ce2 &= ~(gUnknown_3005E10.unk_14); + Rfu.unk_ce2 &= ~(lman.param[0]); if (Rfu.unk_ce2 == 0) sub_80FB0E8(a0); else @@ -2309,10 +2309,10 @@ static void sub_80FB5EC(u8 a0, u8 unused1) else if (Rfu.unk_ce4 != 2 && gReceivedRemoteLinkPlayers == 1) { sub_80FB0E8(a0); - sub_80FD760(0); + 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); @@ -2373,7 +2373,7 @@ bool8 Rfu_IsMaster(void) void RFUVSync(void) { - LinkRfu_syncVBlank_(); + rfu_LMAN_syncVBlank(); } void sub_80FBA44(void) @@ -2445,9 +2445,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 +2455,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 +2465,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); } @@ -2660,7 +2660,7 @@ 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); @@ -2668,7 +2668,7 @@ static void sub_80FC028(u8 taskId) { 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 +2691,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); @@ -2721,7 +2721,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; } diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 69b6603a8..91fb76cea 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -633,7 +633,7 @@ 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)) |