From 1cc9d0eea9a8ca4ff03ff30c2eadacb35557e1d3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 29 Jan 2020 12:39:54 -0500 Subject: Document link_rfu.c as official SDK linkManager.c --- src/link_rfu.c | 1288 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 645 insertions(+), 643 deletions(-) (limited to 'src/link_rfu.c') 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; } } -- cgit v1.2.3 From 664fa0130a5381c5f647565a71f8fe248a0ebafa Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 29 Jan 2020 16:10:52 -0500 Subject: More doccing of linkManager --- src/link_rfu.c | 549 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 273 insertions(+), 276 deletions(-) (limited to 'src/link_rfu.c') diff --git a/src/link_rfu.c b/src/link_rfu.c index 251c230ce..552dfd827 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -5,7 +5,7 @@ LINK_MANAGER lman; static void rfu_LMAN_clearVariables(void); -static void rfu_LMAN_settingPCSWITCH(u32 a0); +static void rfu_LMAN_settingPCSWITCH(u32 rand); static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult); static void rfu_LMAN_MSC_callback(u16 reqCommandId); static void rfu_LMAN_PARENT_checkRecvChildName(void); @@ -13,9 +13,9 @@ 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_occureCallback(u8 msg, u8 param_count); static void rfu_LMAN_disconnect(u8 bmDisconnectSlot); -static void rfu_LMAN_reflectCommunicationStatus(u8 a0); +static void rfu_LMAN_reflectCommunicationStatus(u8 bm_disconnectedSlot); static void rfu_LMAN_checkNICommunicateStatus(void); static void rfu_LMAN_managerChangeAgbClockMaster(void); @@ -24,9 +24,9 @@ u32 rfu_LMAN_REQBN_softReset_and_checkID(void) u32 id = rfu_REQBN_softReset_and_checkID(); if (id == RFU_ID) lman.RFU_powerOn_flag = 1; - if (lman.state != 0x17 && lman.state != 0x01) + if (lman.state != LMAN_FORCED_STOP_AND_RFU_RESET && lman.state != LMAN_STATE_SOFT_RESET_AND_CHECK_ID) { - lman.state = lman.next_state = 0; + lman.state = lman.next_state = LMAN_STATE_READY; } lman.pcswitch_flag = 0; lman.reserveDisconnectSlot_flag = 0; @@ -41,7 +41,7 @@ void rfu_LMAN_REQ_sendData(u8 clockChangeFlag) { if (gRfuLinkStatus->parentChild == MODE_CHILD) { - if (lman.childClockSlave_flag == TRUE) + if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_ON) clockChangeFlag = TRUE; else clockChangeFlag = FALSE; @@ -75,8 +75,8 @@ static void rfu_LMAN_endManager(void) void rfu_LMAN_initializeRFU(INIT_PARAM *init_parameters) { rfu_LMAN_clearVariables(); - lman.state = 1; - lman.next_state = 2; + lman.state = LMAN_STATE_SOFT_RESET_AND_CHECK_ID; + lman.next_state = LMAN_STATE_RESET; lman.init_param = init_parameters; lman.linkRecovery_enable = init_parameters->linkRecovery_enable; lman.linkRecoveryTimer.count_max = init_parameters->linkRecovery_period; @@ -91,7 +91,7 @@ static void rfu_LMAN_clearVariables(void) { u8 i; - lman.state = lman.next_state = 0; + lman.state = lman.next_state = LMAN_STATE_READY; lman.parent_child = MODE_NEUTRAL; lman.pcswitch_flag = 0; lman.child_slot = 0; @@ -115,17 +115,17 @@ u8 rfu_LMAN_establishConnection(u8 parent_child, u16 connect_period, u16 name_ac u8 i; u16 *serial_list; - if (lman.state != 0 && (lman.state != LMAN_STATE_WAIT_RECV_CHILD_NAME || parent_child != 1)) + if (lman.state != LMAN_STATE_READY && (lman.state != LMAN_STATE_WAIT_RECV_CHILD_NAME || parent_child != 1)) { lman.param[0] = 1; - rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 0x01); - return 1; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); + return LMAN_ERROR_MANAGER_BUSY; } if (rfu_getMasterSlave() == AGB_CLK_SLAVE) { lman.param[0] = 2; - rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 0x01); - return 2; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); + return LMAN_ERROR_AGB_CLK_SLAVE; } for (i = 0, serial_list = acceptable_serialNo_list; i < 16; i++) { @@ -137,8 +137,8 @@ u8 rfu_LMAN_establishConnection(u8 parent_child, u16 connect_period, u16 name_ac if (i == 16) { lman.param[0] = 4; - rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 0x01); - return 4; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); + return LMAN_ERROR_ILLEGAL_PARAMETER; } if (parent_child > 1) { @@ -152,11 +152,11 @@ u8 rfu_LMAN_establishConnection(u8 parent_child, u16 connect_period, u16 name_ac } if (parent_child != 0) { - lman.state = 5; + lman.state = LMAN_STATE_START_SEARCH_CHILD; } else { - lman.state = 9; + lman.state = LMAN_STATE_START_SEARCH_PARENT; if (lman.fastSearchParent_flag) { lman.fastSearchParent_flag = 2; @@ -173,17 +173,17 @@ u8 rfu_LMAN_CHILD_connectParent(u16 parentId, u16 connect_period) { u8 i; - if (lman.state != 0 && (lman.state < 9 || lman.state > 11)) + if (lman.state != LMAN_STATE_READY && (lman.state < 9 || lman.state > 11)) { lman.param[0] = 1; - rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 0x01); - return 1; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); + return LMAN_ERROR_MANAGER_BUSY; } if (rfu_getMasterSlave() == AGB_CLK_SLAVE) { lman.param[0] = 2; - rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 0x01); - return 2; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); + return LMAN_ERROR_AGB_CLK_SLAVE; } for (i = 0; i < gRfuLinkStatus->findParentCount; i++) { @@ -195,18 +195,18 @@ u8 rfu_LMAN_CHILD_connectParent(u16 parentId, u16 connect_period) if (gRfuLinkStatus->findParentCount == 0 || i == gRfuLinkStatus->findParentCount) { lman.param[0] = 3; - rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 0x01); - return 3; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); + return LMAN_ERROR_PID_NOT_FOUND; } - if (lman.state == 0 || lman.state == 9) + if (lman.state == LMAN_STATE_READY || lman.state == LMAN_STATE_START_SEARCH_PARENT) { - lman.state = 12; - lman.next_state = 13; + lman.state = LMAN_STATE_START_CONNECT_PARENT; + lman.next_state = LMAN_STATE_POLL_CONNECT_PARENT; } else { - lman.state = 11; - lman.next_state = 12; + lman.state = LMAN_STATE_END_SEARCH_PARENT; + lman.next_state = LMAN_STATE_START_CONNECT_PARENT; } lman.work = parentId; lman.connect_period = connect_period; @@ -221,7 +221,7 @@ static void rfu_LMAN_PARENT_stopWaitLinkRecoveryAndDisconnect(u8 bm_targetSlot) { u8 i; - if ((bm_targetSlot & lman.linkRecoveryTimer.active)==0) + if ((bm_targetSlot & lman.linkRecoveryTimer.active) == 0) return; lman.linkRecoveryTimer.active &= ~bm_targetSlot; for (i = 0; i < RFU_CHILD_MAX; i++) @@ -247,69 +247,69 @@ void rfu_LMAN_stopManager(bool8 forced_stop_and_RFU_reset_flag) if (forced_stop_and_RFU_reset_flag) { rfu_LMAN_clearVariables(); - lman.state = 23; + lman.state = LMAN_FORCED_STOP_AND_RFU_RESET; return; } switch (lman.state) { - case 5: - lman.state = 8; - lman.next_state = 0; + case LMAN_STATE_START_SEARCH_CHILD: + lman.state = LMAN_STATE_WAIT_RECV_CHILD_NAME; + lman.next_state = LMAN_STATE_READY; msg = LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED; break; - case 6: - lman.state = 7; - lman.next_state = 8; + case LMAN_STATE_POLL_SEARCH_CHILD: + lman.state = LMAN_STATE_END_SEARCH_CHILD; + lman.next_state = LMAN_STATE_WAIT_RECV_CHILD_NAME; break; - case 7: - lman.state = 7; - lman.next_state = 8; + case LMAN_STATE_END_SEARCH_CHILD: + lman.state = LMAN_STATE_END_SEARCH_CHILD; + lman.next_state = LMAN_STATE_WAIT_RECV_CHILD_NAME; break; - case 8: + case LMAN_STATE_WAIT_RECV_CHILD_NAME: break; - case 9: - lman.state = lman.next_state = 0; + case LMAN_STATE_START_SEARCH_PARENT: + lman.state = lman.next_state = LMAN_STATE_READY; msg = LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED; break; - case 10: - lman.state = 11; - lman.next_state = 0; + case LMAN_STATE_POLL_SEARCH_PARENT: + lman.state = LMAN_STATE_END_SEARCH_PARENT; + lman.next_state = LMAN_STATE_READY; break; - case 11: - lman.state = 11; - lman.next_state = 0; + case LMAN_STATE_END_SEARCH_PARENT: + lman.state = LMAN_STATE_END_SEARCH_PARENT; + lman.next_state = LMAN_STATE_READY; break; - case 12: - lman.state = lman.next_state = 0; + case LMAN_STATE_START_CONNECT_PARENT: + lman.state = lman.next_state = LMAN_STATE_READY; msg = LMAN_MSG_CONNECT_PARENT_FAILED; break; - case 13: - lman.state = 14; + case LMAN_STATE_POLL_CONNECT_PARENT: + lman.state = LMAN_STATE_END_CONNECT_PARENT; break; - case 14: - lman.state = 14; + case LMAN_STATE_END_CONNECT_PARENT: + lman.state = LMAN_STATE_END_CONNECT_PARENT; break; - case 15: + case LMAN_STATE_SEND_CHILD_NAME: break; - case 16: + case LMAN_STATE_START_LINK_RECOVERY: lman.state = lman.state_bak[0]; lman.next_state = lman.state_bak[1]; rfu_LMAN_disconnect(gRfuLinkStatus->linkLossSlotFlag); lman.param[0] = gRfuLinkStatus->linkLossSlotFlag; - rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, 0x01); + rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, 1); return; - case 17: - lman.state = 18; + case LMAN_STATE_POLL_LINK_RECOVERY: + lman.state = LMAN_STATE_END_LINK_RECOVERY; break; - case 18: - lman.state = 18; + case LMAN_STATE_END_LINK_RECOVERY: + lman.state = LMAN_STATE_END_LINK_RECOVERY; break; default: - lman.state = lman.next_state = 0; + lman.state = lman.next_state = LMAN_STATE_READY; msg = LMAN_MSG_MANAGER_STOPPED; break; } - if (lman.state == 0) + if (lman.state == LMAN_STATE_READY) { rfu_LMAN_occureCallback(msg, 0); } @@ -346,21 +346,21 @@ static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID) lman.linkRecoveryTimer.count[i] = lman.linkRecoveryTimer.count_max; } } - rfu_LMAN_occureCallback(0x31, 0x01); + rfu_LMAN_occureCallback(LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY, 1); } else { 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); + rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, 1); } } else { rfu_LMAN_disconnect(bm_linkLossSlot); disconnect_occure_flag = TRUE; - rfu_LMAN_occureCallback(0x30, 0x02); + rfu_LMAN_occureCallback(LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED, 2); } rfu_LMAN_managerChangeAgbClockMaster(); } @@ -377,7 +377,7 @@ static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID) } lman.linkRecoveryTimer.active &= ~bm_linkRecoverySlot; lman.param[0] = bm_linkRecoverySlot; - rfu_LMAN_occureCallback(0x32, 0x01); + rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_SUCCESSED, 1); } if (lman.linkRecoveryTimer.active) { @@ -395,7 +395,7 @@ static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID) 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); + rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, 1); } } if (!lman.linkRecoveryTimer.active) @@ -410,7 +410,7 @@ void rfu_LMAN_syncVBlank(void) { if (rfu_syncVBlank()) { - rfu_LMAN_occureCallback(0xF1, 0x00); + rfu_LMAN_occureCallback(LMAN_MSG_WATCH_DOG_TIMER_ERROR, 0); rfu_LMAN_managerChangeAgbClockMaster(); } } @@ -419,9 +419,9 @@ void rfu_LMAN_manager_entity(u32 rand) { u8 msg; - if (lman.LMAN_callback == NULL && lman.state != 0) + if (lman.LMAN_callback == NULL && lman.state != LMAN_STATE_READY) { - lman.state = 0; + lman.state = LMAN_STATE_READY; return; } if (lman.pcswitch_flag) @@ -430,13 +430,13 @@ void rfu_LMAN_manager_entity(u32 rand) } while (1) { - if (lman.state != 0) + if (lman.state != LMAN_STATE_READY) { rfu_waitREQComplete(); lman.active = 1; switch (lman.state) { - case 23: + case LMAN_FORCED_STOP_AND_RFU_RESET: if (rfu_LMAN_REQBN_softReset_and_checkID() == RFU_ID) { msg=LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET; @@ -445,79 +445,79 @@ void rfu_LMAN_manager_entity(u32 rand) { msg=LMAN_MSG_RFU_FATAL_ERROR; } - lman.state = lman.next_state = 0; + lman.state = lman.next_state = LMAN_STATE_READY; rfu_LMAN_occureCallback(msg, 0); break; - case 1: + case LMAN_STATE_SOFT_RESET_AND_CHECK_ID: if (rfu_LMAN_REQBN_softReset_and_checkID() == RFU_ID) { lman.state = lman.next_state; - lman.next_state = 3; + lman.next_state = LMAN_STATE_CONFIG_SYSTEM; } else { - lman.state = lman.next_state = 0; + lman.state = lman.next_state = LMAN_STATE_READY; rfu_LMAN_occureCallback(LMAN_MSG_RFU_FATAL_ERROR, 0); } break; - case 2: + case LMAN_STATE_RESET: rfu_REQ_reset(); break; - case 3: + case LMAN_STATE_CONFIG_SYSTEM: rfu_REQ_configSystem(lman.init_param->availSlot_flag, lman.init_param->maxMFrame, lman.init_param->MC_TimerCount); break; - case 4: + case LMAN_STATE_CONFIG_GAME_DATA: rfu_REQ_configGameData(lman.init_param->mboot_flag, lman.init_param->serialNo, (const u8 *)lman.init_param->gameName, lman.init_param->userName); break; - case 5: + case LMAN_STATE_START_SEARCH_CHILD: rfu_REQ_startSearchChild(); break; - case 6: + case LMAN_STATE_POLL_SEARCH_CHILD: rfu_REQ_pollSearchChild(); break; - case 7: + case LMAN_STATE_END_SEARCH_CHILD: rfu_REQ_endSearchChild(); break; - case 8: + case LMAN_STATE_WAIT_RECV_CHILD_NAME: break; - case 9: + case LMAN_STATE_START_SEARCH_PARENT: rfu_REQ_startSearchParent(); break; - case 10: + case LMAN_STATE_POLL_SEARCH_PARENT: rfu_REQ_pollSearchParent(); break; - case 11: + case LMAN_STATE_END_SEARCH_PARENT: rfu_REQ_endSearchParent(); break; - case 12: + case LMAN_STATE_START_CONNECT_PARENT: rfu_REQ_startConnectParent(lman.work); break; - case 13: + case LMAN_STATE_POLL_CONNECT_PARENT: rfu_REQ_pollConnectParent(); break; - case 14: + case LMAN_STATE_END_CONNECT_PARENT: rfu_REQ_endConnectParent(); break; - case 15: + case LMAN_STATE_SEND_CHILD_NAME: break; - case 16: + case LMAN_STATE_START_LINK_RECOVERY: rfu_REQ_CHILD_startConnectRecovery(gRfuLinkStatus->linkLossSlotFlag); break; - case 17: + case LMAN_STATE_POLL_LINK_RECOVERY: rfu_REQ_CHILD_pollConnectRecovery(); break; - case 18: + case LMAN_STATE_END_LINK_RECOVERY: rfu_REQ_CHILD_endConnectRecovery(); break; - case 19: + case LMAN_STATE_MS_CHANGE: rfu_REQ_changeMasterSlave(); break; - case 20: + case LMAN_STATE_WAIT_CLOCK_MASTER: break; - case 21: + case LMAN_STATE_STOP_MODE: rfu_REQ_stopMode(); break; - case 22: + case LMAN_STATE_BACK_STATE: break; default: break; @@ -546,7 +546,7 @@ static void rfu_LMAN_settingPCSWITCH(u32 rand) if (lman.pcswitch_flag == 5) { lman.parent_child = MODE_PARENT; - lman.state = 5; + lman.state = LMAN_STATE_START_SEARCH_CHILD; lman.connect_period = lman.pcswitch_period_bak; if (lman.connect_period) { @@ -560,7 +560,7 @@ static void rfu_LMAN_settingPCSWITCH(u32 rand) if (lman.pcswitch_flag == 1) { lman.parent_child = MODE_PARENT; - lman.state = 5; + lman.state = LMAN_STATE_START_SEARCH_CHILD; lman.connect_period = rand % 140; lman.pcswitch_period_bak = 140 - lman.connect_period; if (lman.connect_period) @@ -577,15 +577,14 @@ static void rfu_LMAN_settingPCSWITCH(u32 rand) lman.parent_child = MODE_CHILD; lman.connect_period = 40; lman.pcswitch_flag = 4; - lman.state = 9; + lman.state = LMAN_STATE_START_SEARCH_PARENT; } } static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) { - u8 sp0; - register u8 *stwiRecvBuffer asm("r0"); - u8 *tmp; + u8 status; + u8 *stwiRecvBuffer; u8 i; if (lman.active != 0) @@ -597,44 +596,44 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) if (reqResult == 0) { lman.state = lman.next_state; - lman.next_state = 4; + lman.next_state = LMAN_STATE_CONFIG_GAME_DATA; } break; case ID_SYSTEM_CONFIG_REQ: if (reqResult == 0) { lman.state = lman.next_state; - lman.next_state = 0; + lman.next_state = LMAN_STATE_READY; } break; case ID_GAME_CONFIG_REQ: if (reqResult == 0) { - lman.state = lman.next_state = 0; - rfu_LMAN_occureCallback(0x00, 0x00); + lman.state = lman.next_state = LMAN_STATE_READY; + rfu_LMAN_occureCallback(LMAN_MSG_INITIALIZE_COMPLETED, 0); } break; case ID_SC_START_REQ: if (reqResult == 0) { - lman.state = lman.next_state = 6; + lman.state = lman.next_state = LMAN_STATE_POLL_SEARCH_CHILD; } break; case ID_SC_POLL_REQ: if (lman.connect_period && --lman.connect_period == 0) { - lman.state = 7; - lman.next_state = 8; + lman.state = LMAN_STATE_END_SEARCH_CHILD; + lman.next_state = LMAN_STATE_WAIT_RECV_CHILD_NAME; } break; case ID_SC_END_REQ: if (reqResult == 0) { lman.state = lman.next_state; - lman.next_state = 0; + lman.next_state = LMAN_STATE_READY; if (lman.pcswitch_flag == 0) { - rfu_LMAN_occureCallback(0x13, 0x00); + rfu_LMAN_occureCallback(LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED, 0); } } break; @@ -645,30 +644,30 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) { lman.connect_period--; } - lman.state = lman.next_state = 10; + lman.state = lman.next_state = LMAN_STATE_POLL_SEARCH_PARENT; } break; case ID_SP_POLL_REQ: if (reqResult == 0) { - sp0 = rfu_LMAN_CHILD_checkEnableParentCandidate(); - lman.param[0] = sp0; - if (sp0) + status = rfu_LMAN_CHILD_checkEnableParentCandidate(); + lman.param[0] = status; + if (status) { - rfu_LMAN_occureCallback(0x20, 0x01); + rfu_LMAN_occureCallback(LMAN_MSG_PARENT_FOUND, 1); } if (lman.fastSearchParent_flag && lman.connect_period != 1 && gRfuLinkStatus->findParentCount == RFU_CHILD_MAX) { rfu_REQ_endSearchParent(); rfu_waitREQComplete(); - lman.state = 9; + lman.state = LMAN_STATE_START_SEARCH_PARENT; lman.fastSearchParent_flag = 1; } } if (lman.connect_period && --lman.connect_period == 0) { - lman.state = 11; - lman.next_state = 0; + lman.state = LMAN_STATE_END_SEARCH_PARENT; + lman.next_state = LMAN_STATE_READY; } break; case ID_SP_END_REQ: @@ -677,14 +676,14 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) lman.state = lman.next_state; if (lman.pcswitch_flag == 0) { - if (lman.state == 0) + if (lman.state == LMAN_STATE_READY) { - rfu_LMAN_occureCallback(0x21, 0x00); + rfu_LMAN_occureCallback(LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED, 0); } } else if (lman.pcswitch_flag != 7) { - lman.state = 5; + lman.state = LMAN_STATE_START_SEARCH_CHILD; lman.pcswitch_flag = 5; } } @@ -692,38 +691,38 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) case ID_CP_START_REQ: if (reqResult == 0) { - lman.state = lman.next_state = 13; + lman.state = lman.next_state = LMAN_STATE_POLL_CONNECT_PARENT; } break; case ID_CP_POLL_REQ: - if (reqResult == 0 && !rfu_getConnectParentStatus(&sp0, &lman.child_slot) && !sp0) + if (reqResult == 0 && !rfu_getConnectParentStatus(&status, &lman.child_slot) && !status) { - lman.state = 14; + lman.state = LMAN_STATE_END_CONNECT_PARENT; } if (lman.connect_period && --lman.connect_period == 0) { - lman.state = 14; + lman.state = LMAN_STATE_END_CONNECT_PARENT; } break; case ID_CP_END_REQ: - if (reqResult == 0 && !rfu_getConnectParentStatus(&sp0, &lman.child_slot)) + if (reqResult == 0 && !rfu_getConnectParentStatus(&status, &lman.child_slot)) { - if (!sp0) + if (!status) { - lman.state = 19; - lman.next_state = 15; + lman.state = LMAN_STATE_MS_CHANGE; + lman.next_state = LMAN_STATE_SEND_CHILD_NAME; lman.work = 0x22; lman.param[0] = lman.child_slot; } else { - lman.state = lman.next_state = 0; + lman.state = lman.next_state = LMAN_STATE_READY; lman.work = 0x23; - lman.param[0] = sp0; + lman.param[0] = status; if (lman.pcswitch_flag) { lman.pcswitch_flag = 3; - lman.state = 9; + lman.state = LMAN_STATE_START_SEARCH_PARENT; } } rfu_LMAN_occureCallback(lman.work, 0x01); @@ -734,7 +733,7 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) if (reqResult == 0) { lman.param[0] = gRfuLinkStatus->linkLossSlotFlag; - lman.state = lman.next_state = 17; + lman.state = lman.next_state = LMAN_STATE_POLL_LINK_RECOVERY; for (lman.child_slot = 0; lman.child_slot < RFU_CHILD_MAX; lman.child_slot++) { if ((gRfuLinkStatus->linkLossSlotFlag >> lman.child_slot) & 1) @@ -745,27 +744,27 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) } break; case ID_CPR_POLL_REQ: - if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&sp0) && sp0 < 2) + if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&status) && status < 2) { - lman.state = 18; + lman.state = LMAN_STATE_END_LINK_RECOVERY; } if (lman.linkRecoveryTimer.count[lman.child_slot] && --lman.linkRecoveryTimer.count[lman.child_slot] == 0) { - lman.state = 18; + lman.state = LMAN_STATE_END_LINK_RECOVERY; } break; case ID_CPR_END_REQ: - if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&sp0)) + if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&status)) { - if (!sp0) + if (!status) { - lman.state = 19; - lman.next_state = 22; + lman.state = LMAN_STATE_MS_CHANGE; + lman.next_state = LMAN_STATE_BACK_STATE; lman.work = 0x32; } else { - lman.state = lman.next_state = 0; + lman.state = lman.next_state = LMAN_STATE_READY; rfu_LMAN_disconnect(gRfuLinkStatus->linkLossSlotFlag); lman.work = 0x33; } @@ -779,30 +778,29 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) case ID_MS_CHANGE_REQ: if (reqResult == 0) { - if (lman.next_state == 22) + if (lman.next_state == LMAN_STATE_BACK_STATE) { lman.state = lman.state_bak[0]; lman.next_state = lman.state_bak[1]; - lman.childClockSlave_flag = 1; - rfu_LMAN_occureCallback(0x41, 0x00); + lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_ON; + rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_SLAVE, 0); } - else if (lman.next_state == 15) + else if (lman.next_state == LMAN_STATE_SEND_CHILD_NAME) { lman.state = lman.next_state; - lman.childClockSlave_flag = 1; - rfu_LMAN_occureCallback(0x41, 0x00); + lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_ON; + rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_SLAVE, 0); lman.nameAcceptTimer.active |= 1 << lman.child_slot; lman.nameAcceptTimer.count[lman.child_slot] = lman.nameAcceptTimer.count_max; rfu_clearSlot(TYPE_NI_SEND, lman.child_slot); - tmp = &sp0; - *tmp = rfu_NI_CHILD_setSendGameName(lman.child_slot, 0x0e); - if (*tmp) + status = rfu_NI_CHILD_setSendGameName(lman.child_slot, 0x0e); + if (status) { - lman.state = lman.next_state = 0; + lman.state = lman.next_state = LMAN_STATE_READY; rfu_LMAN_managerChangeAgbClockMaster(); rfu_LMAN_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); - lman.param[0] = sp0; - rfu_LMAN_occureCallback(0x25, 0x01); + lman.param[0] = status; + rfu_LMAN_occureCallback(LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED, 1); } } } @@ -810,8 +808,8 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) case ID_STOP_MODE_REQ: if (reqResult == 0) { - lman.state = lman.next_state = 0; - rfu_LMAN_occureCallback(0x42, 0x00); + lman.state = lman.next_state = LMAN_STATE_READY; + rfu_LMAN_occureCallback(LMAN_MSG_RFU_POWER_DOWN, 0); } break; } @@ -821,12 +819,12 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) { rfu_REQ_RFUStatus(); rfu_waitREQComplete(); - rfu_getRFUStatus(&sp0); - if (sp0 == 0 && gRfuLinkStatus->parentChild == MODE_CHILD) + rfu_getRFUStatus(&status); + if (status == 0 && gRfuLinkStatus->parentChild == MODE_CHILD) { - stwiRecvBuffer = rfu_getSTWIRecvBuffer()->rxPacketAlloc.rfuPacket8.data; - stwiRecvBuffer[4] = gRfuLinkStatus->connSlotFlag; - stwiRecvBuffer[5] = 1; + stwiRecvBuffer = rfu_getSTWIRecvBuffer() + 4; + *stwiRecvBuffer++ = gRfuLinkStatus->connSlotFlag; + *stwiRecvBuffer = REASON_LINK_LOSS; rfu_LMAN_linkWatcher(0x29); reqResult = 0; } @@ -836,8 +834,7 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) case ID_DISCONNECT_REQ: if (reqResult == 0) { - stwiRecvBuffer = rfu_getSTWIRecvBuffer()->rxPacketAlloc.rfuPacket8.data; - lman.param[0] = stwiRecvBuffer[8]; + lman.param[0] = *(rfu_getSTWIRecvBuffer() + 8); rfu_LMAN_reflectCommunicationStatus(lman.param[0]); if (lman.linkRecoveryTimer.active) { @@ -851,13 +848,13 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) } if (lman.parent_child == 0) { - lman.state = lman.next_state = 0; + lman.state = lman.next_state = LMAN_STATE_READY; } } - sp0 = lman.acceptSlot_flag & lman.param[0]; + status = lman.acceptSlot_flag & lman.param[0]; for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((sp0 >> i) & 1 && lman.acceptCount) + if ((status >> i) & 1 && lman.acceptCount) { lman.acceptCount--; } @@ -871,25 +868,25 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) { lman.connect_period = lman.pcswitch_period_bak; lman.pcswitch_flag = 6; - lman.state = 6; + lman.state = LMAN_STATE_POLL_SEARCH_CHILD; } - else if (lman.state != 6 && lman.state != 7) + else if (lman.state != LMAN_STATE_POLL_SEARCH_CHILD && lman.state != LMAN_STATE_END_SEARCH_CHILD) { lman.pcswitch_flag = 1; - lman.state = 5; + lman.state = LMAN_STATE_START_SEARCH_CHILD; } } } if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) { - if (lman.state == 0) + if (lman.state == LMAN_STATE_READY) { lman.parent_child = MODE_NEUTRAL; } } if (lman.active == 0) { - rfu_LMAN_occureCallback(0x40, 0x01); + rfu_LMAN_occureCallback(LMAN_MSG_LINK_DISCONNECTED_BY_USER, 1); } } break; @@ -897,7 +894,7 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) rfu_LMAN_CHILD_checkSendChildName2(); if (gRfuLinkStatus->parentChild != MODE_NEUTRAL) { - rfu_LMAN_occureCallback(0x50, 0x00); + rfu_LMAN_occureCallback(LMAN_MSG_RECV_DATA_REQ_COMPLETED, 0); } break; case ID_RESET_REQ: @@ -932,170 +929,170 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) lman.param[1] = reqResult; if (lman.active) { - lman.state = lman.next_state = 0; + lman.state = lman.next_state = LMAN_STATE_READY; } - rfu_LMAN_occureCallback(0xf0, 0x02); + rfu_LMAN_occureCallback(LMAN_MSG_REQ_API_ERROR, 2); rfu_LMAN_managerChangeAgbClockMaster(); } } if (reqCommandId == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ) { - rfu_LMAN_occureCallback(0xf2, 0x00); + rfu_LMAN_occureCallback(LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA, 0); rfu_LMAN_managerChangeAgbClockMaster(); } } static void rfu_LMAN_MSC_callback(u16 reqCommandId) { - u8 r7; - u8 ackFlag; + u8 active_bak; + u8 thisAck_flag; - r7 = lman.active; + active_bak = lman.active; lman.active = 0; lman.msc_exe_flag = 1; if (gRfuLinkStatus->parentChild == MODE_CHILD) { rfu_LMAN_linkWatcher(reqCommandId); - if (lman.childClockSlave_flag != 1) + if (lman.childClockSlave_flag != RFU_CHILD_CLOCK_SLAVE_ON) { rfu_LMAN_managerChangeAgbClockMaster(); lman.msc_exe_flag = 0; - lman.active = r7; + lman.active = active_bak; return; } } else { - if (!rfu_UNI_PARENT_getDRAC_ACK(&ackFlag)) + if (!rfu_UNI_PARENT_getDRAC_ACK(&thisAck_flag)) { - lman.parentAck_flag |= ackFlag; + lman.parentAck_flag |= thisAck_flag; } } if (lman.MSC_callback != NULL) { lman.MSC_callback(reqCommandId); rfu_waitREQComplete(); - if (lman.childClockSlave_flag == 2) + if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_OFF_REQ) { rfu_LMAN_managerChangeAgbClockMaster(); } } lman.msc_exe_flag = 0; - lman.active = r7; + lman.active = active_bak; } static void rfu_LMAN_PARENT_checkRecvChildName(void) { - u8 flags; - u8 sp0; + u8 newSlot; + u8 newAcceptSlot; u8 i; - u8 r5; - u8 r4; + u8 flags; + u8 tgtSlot; const u16 *ptr; - if (lman.state == 5 || lman.state == 6 || lman.state == 7 || lman.state == 8) + if (lman.state == LMAN_STATE_START_SEARCH_CHILD || lman.state == LMAN_STATE_POLL_SEARCH_CHILD || lman.state == LMAN_STATE_END_SEARCH_CHILD || lman.state == LMAN_STATE_WAIT_RECV_CHILD_NAME) { - flags = ((gRfuLinkStatus->connSlotFlag ^ lman.connectSlot_flag_old) & gRfuLinkStatus->connSlotFlag) & ~gRfuLinkStatus->getNameFlag; + newSlot = ((gRfuLinkStatus->connSlotFlag ^ lman.connectSlot_flag_old) & gRfuLinkStatus->connSlotFlag) & ~gRfuLinkStatus->getNameFlag; lman.connectSlot_flag_old = gRfuLinkStatus->connSlotFlag; - if (flags) + if (newSlot) { - lman.param[0] = flags; - rfu_LMAN_occureCallback(0x10, 0x01); + lman.param[0] = newSlot; + rfu_LMAN_occureCallback(LMAN_MSG_NEW_CHILD_CONNECT_DETECTED, 1); } - sp0 = 0x00; + newAcceptSlot = 0x00; for (i = 0; i < RFU_CHILD_MAX; i++) { - r4 = 1 << i; - r5 = 0x00; - if (flags & r4) + tgtSlot = 1 << i; + flags = 0x00; + if (newSlot & tgtSlot) { lman.nameAcceptTimer.count[i] = lman.nameAcceptTimer.count_max; - lman.nameAcceptTimer.active |= r4; + lman.nameAcceptTimer.active |= tgtSlot; } - else if (lman.nameAcceptTimer.active & r4) + else if (lman.nameAcceptTimer.active & tgtSlot) { if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS) { if (gRfuSlotStatusNI[i]->recv.dataType == 1) // Game identification information { - r5 = 0x02; + flags = 0x02; for (ptr = lman.acceptable_serialNo_list; *ptr != 0xFFFF; ptr++) { if (gRfuLinkStatus->partner[i].serialNo == *ptr) { - lman.acceptSlot_flag |= r4; + lman.acceptSlot_flag |= tgtSlot; lman.acceptCount++; - sp0 |= r4; - r5 |= 0x01; + newAcceptSlot |= tgtSlot; + flags |= 0x01; break; } } - if (!(r5 & 0x01)) + if (!(flags & 0x01)) { - r5 |= 0x04; + flags |= 0x04; } } } else if (--lman.nameAcceptTimer.count[i] == 0) { - r5 = 0x06; + flags = 0x06; } - if (r5 & 0x02) + if (flags & 0x02) { - lman.nameAcceptTimer.active &= ~r4; + lman.nameAcceptTimer.active &= ~tgtSlot; lman.nameAcceptTimer.count[i] = 0; rfu_clearSlot(TYPE_NI_RECV, i); } - if (r5 & 0x04) + if (flags & 0x04) { - lman.reserveDisconnectSlot_flag |= r4; + lman.reserveDisconnectSlot_flag |= tgtSlot; } } } - if (sp0) + if (newAcceptSlot) { - lman.param[0] = sp0; - rfu_LMAN_occureCallback(0x11, 0x01); + lman.param[0] = newAcceptSlot; + rfu_LMAN_occureCallback(LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED, 1); } if (lman.reserveDisconnectSlot_flag) { - r5 = 0x01; + flags = 0x01; if (gRfuLinkStatus->sendSlotUNIFlag && ((lman.parentAck_flag & lman.acceptSlot_flag) != lman.acceptSlot_flag)) { - r5 = 0x00; + flags = 0x00; } - if (r5) + if (flags) { rfu_LMAN_disconnect(lman.reserveDisconnectSlot_flag); lman.param[0] = lman.reserveDisconnectSlot_flag; lman.reserveDisconnectSlot_flag = 0; - rfu_LMAN_occureCallback(0x12, 0x01); + rfu_LMAN_occureCallback(LMAN_MSG_NEW_CHILD_CONNECT_REJECTED, 1); } } - if (lman.nameAcceptTimer.active == 0 && lman.state == 8) + if (lman.nameAcceptTimer.active == 0 && lman.state == LMAN_STATE_WAIT_RECV_CHILD_NAME) { if (lman.pcswitch_flag == 0) { - lman.state = lman.next_state = 0; - rfu_LMAN_occureCallback(0x14, 0x00); + lman.state = lman.next_state = LMAN_STATE_READY; + rfu_LMAN_occureCallback(LMAN_MSG_END_WAIT_CHILD_NAME, 0); } else { if (lman.pcswitch_flag == 2) { lman.pcswitch_flag = 3; - lman.state = 9; + lman.state = LMAN_STATE_START_SEARCH_PARENT; } else { lman.pcswitch_flag = 1; - lman.state = 5; + lman.state = LMAN_STATE_START_SEARCH_CHILD; } if (lman.acceptSlot_flag) { lman.connect_period = 0; lman.pcswitch_flag = 8; - lman.state = 5; + lman.state = LMAN_STATE_START_SEARCH_CHILD; } } } @@ -1106,43 +1103,43 @@ static void rfu_LMAN_CHILD_checkSendChildName(void) { u16 imeBak = REG_IME; REG_IME = 0; - if (lman.state == 15) + if (lman.state == LMAN_STATE_SEND_CHILD_NAME) { if (--lman.nameAcceptTimer.count[lman.child_slot] == 0 || gRfuSlotStatusNI[lman.child_slot]->send.state == SLOT_STATE_SEND_FAILED) { rfu_LMAN_requestChangeAgbClockMaster(); - lman.state = 24; + lman.state = LMAN_STATE_WAIT_CHANGE_CLOCK_MASTER; rfu_clearSlot(TYPE_NI_SEND, lman.child_slot); lman.nameAcceptTimer.active &= ~(1 << lman.child_slot); lman.nameAcceptTimer.count[lman.child_slot] = 0; } } REG_IME = imeBak; - if (lman.state == 24) + if (lman.state == LMAN_STATE_WAIT_CHANGE_CLOCK_MASTER) { - if (lman.childClockSlave_flag == 1) + if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_ON) { rfu_LMAN_requestChangeAgbClockMaster(); } - if (lman.childClockSlave_flag == 0) + if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_OFF) { - lman.state = lman.next_state = 0; + lman.state = lman.next_state = LMAN_STATE_READY; rfu_LMAN_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); lman.param[0] = 0; - rfu_LMAN_occureCallback(0x25, 0x01); + rfu_LMAN_occureCallback(LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED, 1); } } } static void rfu_LMAN_CHILD_checkSendChildName2(void) { - if (lman.state == 15 && gRfuSlotStatusNI[lman.child_slot]->send.state == SLOT_STATE_SEND_SUCCESS) + if (lman.state == LMAN_STATE_SEND_CHILD_NAME && gRfuSlotStatusNI[lman.child_slot]->send.state == SLOT_STATE_SEND_SUCCESS) { - lman.state = lman.next_state = 0; + lman.state = lman.next_state = LMAN_STATE_READY; rfu_clearSlot(TYPE_NI_SEND, lman.child_slot); lman.nameAcceptTimer.active &= ~(1 << lman.child_slot); lman.nameAcceptTimer.count[lman.child_slot] = 0; - rfu_LMAN_occureCallback(0x24, 0x00); + rfu_LMAN_occureCallback(LMAN_MSG_CHILD_NAME_SEND_COMPLETED, 0); } } @@ -1152,8 +1149,8 @@ static void rfu_LMAN_CHILD_linkRecoveryProcess(void) { lman.state_bak[0] = lman.state; lman.state_bak[1] = lman.next_state; - lman.state = 16; - lman.next_state = 17; + lman.state = LMAN_STATE_START_LINK_RECOVERY; + lman.next_state = LMAN_STATE_POLL_LINK_RECOVERY; lman.linkRecovery_start_flag = 2; } } @@ -1177,25 +1174,25 @@ static u8 rfu_LMAN_CHILD_checkEnableParentCandidate(void) return flags; } -static void rfu_LMAN_occureCallback(u8 a0, u8 a1) +static void rfu_LMAN_occureCallback(u8 msg, u8 param_count) { if (lman.LMAN_callback != NULL) { - lman.LMAN_callback(a0, a1); + lman.LMAN_callback(msg, param_count); } lman.param[0] = lman.param[1] = 0; } -static void rfu_LMAN_disconnect(u8 a0) +static void rfu_LMAN_disconnect(u8 bm_disconnectedSlot) { - u8 unk_0e_bak = lman.active; + u8 active_bak = lman.active; lman.active = 1; - rfu_REQ_disconnect(a0); + rfu_REQ_disconnect(bm_disconnectedSlot); rfu_waitREQComplete(); - lman.active = unk_0e_bak; + lman.active = active_bak; } -static void rfu_LMAN_reflectCommunicationStatus(u8 a0) +static void rfu_LMAN_reflectCommunicationStatus(u8 bm_disconnectedSlot) { u8 i; @@ -1203,9 +1200,9 @@ static void rfu_LMAN_reflectCommunicationStatus(u8 a0) { for (i = 0; i < RFU_CHILD_MAX; i++) { - if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->send.bmSlot & a0) + if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->send.bmSlot & bm_disconnectedSlot) { - rfu_changeSendTarget(TYPE_NI, i, gRfuSlotStatusNI[i]->send.bmSlot & ~a0); + rfu_changeSendTarget(TYPE_NI, i, gRfuSlotStatusNI[i]->send.bmSlot & ~bm_disconnectedSlot); } } } @@ -1213,7 +1210,7 @@ static void rfu_LMAN_reflectCommunicationStatus(u8 a0) { for (i = 0; i < RFU_CHILD_MAX; i++) { - if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->recv.bmSlot & a0) + if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->recv.bmSlot & bm_disconnectedSlot) { rfu_NI_stopReceivingData(i); } @@ -1221,12 +1218,12 @@ static void rfu_LMAN_reflectCommunicationStatus(u8 a0) } if (gRfuLinkStatus->sendSlotUNIFlag) { - gRfuLinkStatus->sendSlotUNIFlag &= ~a0; + gRfuLinkStatus->sendSlotUNIFlag &= ~bm_disconnectedSlot; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (gRfuSlotStatusUNI[i]->send.state == SLOT_STATE_SEND_UNI && a0 & gRfuSlotStatusUNI[i]->send.bmSlot) + if (gRfuSlotStatusUNI[i]->send.state == SLOT_STATE_SEND_UNI && bm_disconnectedSlot & gRfuSlotStatusUNI[i]->send.bmSlot) { - gRfuSlotStatusUNI[i]->send.bmSlot &= ~a0; + gRfuSlotStatusUNI[i]->send.bmSlot &= ~bm_disconnectedSlot; } } } @@ -1274,9 +1271,9 @@ static void rfu_LMAN_checkNICommunicateStatus(void) } } -void rfu_LMAN_setMSCCallback(void (*func)(u16)) +void rfu_LMAN_setMSCCallback(void (*MSC_callback_p)(u16)) { - lman.MSC_callback = func; + lman.MSC_callback = MSC_callback_p; rfu_setMSCCallback(rfu_LMAN_MSC_callback); } @@ -1290,7 +1287,7 @@ u8 rfu_LMAN_setLinkRecovery(u8 enable_flag, u16 recovery_period) u16 imeBak; if (lman.linkRecovery_enable && enable_flag == 0 && lman.linkRecoveryTimer.active) { - return 5; + return LMAN_ERROR_NOW_LINK_RECOVERY; } imeBak = REG_IME; REG_IME = 0; @@ -1305,8 +1302,8 @@ static u8 rfu_LMAN_setNIFailCounterLimit(u16 NI_failCounter_limit) if (gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag) { lman.param[0] = 6; - rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 0x01); - return 6; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); + return LMAN_ERROR_NOW_COMMUNICATION; } lman.NI_failCounter_limit = NI_failCounter_limit; return 0; @@ -1314,11 +1311,11 @@ static u8 rfu_LMAN_setNIFailCounterLimit(u16 NI_failCounter_limit) static u8 rfu_LMAN_setFastSearchParent(u8 enable_flag) { - if (lman.state == 9 || lman.state == 10 || lman.state == 11) + if (lman.state == LMAN_STATE_START_SEARCH_PARENT || lman.state == LMAN_STATE_POLL_SEARCH_PARENT || lman.state == LMAN_STATE_END_SEARCH_PARENT) { lman.param[0] = 7; - rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 0x01); - return 7; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); + return LMAN_ERROR_NOW_SEARCH_PARENT; } if (enable_flag) { @@ -1333,22 +1330,22 @@ static u8 rfu_LMAN_setFastSearchParent(u8 enable_flag) static void rfu_LMAN_managerChangeAgbClockMaster(void) { - if (lman.childClockSlave_flag) + if (lman.childClockSlave_flag != RFU_CHILD_CLOCK_SLAVE_OFF) { - lman.childClockSlave_flag = 0; - rfu_LMAN_occureCallback(0x45, 0x00); + lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_OFF; + rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_MASTER, 0); } } void rfu_LMAN_requestChangeAgbClockMaster(void) { - if (lman.childClockSlave_flag == 0) + if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_OFF) { - rfu_LMAN_occureCallback(0x45, 0x00); + rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_MASTER, 0); } - else if (lman.childClockSlave_flag == 1) + else if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_ON) { - lman.childClockSlave_flag = 2; + lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_OFF_REQ; } } @@ -1358,25 +1355,25 @@ void rfu_LMAN_forceChangeSP(void) { switch (lman.state) { - case 5: + case LMAN_STATE_START_SEARCH_CHILD: lman.pcswitch_flag = 3; - lman.state = 9; + lman.state = LMAN_STATE_START_SEARCH_PARENT; break; - case 6: + case LMAN_STATE_POLL_SEARCH_CHILD: lman.pcswitch_flag = 2; lman.connect_period = 1; break; - case 7: - case 8: + case LMAN_STATE_END_SEARCH_CHILD: + case LMAN_STATE_WAIT_RECV_CHILD_NAME: lman.pcswitch_flag = 2; break; - case 9: - case 10: + case LMAN_STATE_START_SEARCH_PARENT: + case LMAN_STATE_POLL_SEARCH_PARENT: lman.connect_period = 40; break; - case 11: + case LMAN_STATE_END_SEARCH_PARENT: lman.connect_period = 40; - lman.state = 10; + lman.state = LMAN_STATE_POLL_SEARCH_PARENT; break; } } -- cgit v1.2.3 From 8a3eb95ed4c67031efc641fad632782dbe7b46bf Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 29 Jan 2020 16:54:03 -0500 Subject: Yet more documentation of rfu fields and functions --- src/link_rfu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/link_rfu.c') diff --git a/src/link_rfu.c b/src/link_rfu.c index 552dfd827..89245398d 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -825,7 +825,7 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) stwiRecvBuffer = rfu_getSTWIRecvBuffer() + 4; *stwiRecvBuffer++ = gRfuLinkStatus->connSlotFlag; *stwiRecvBuffer = REASON_LINK_LOSS; - rfu_LMAN_linkWatcher(0x29); + rfu_LMAN_linkWatcher(ID_DISCONNECTED_AND_CHANGE_REQ); reqResult = 0; } } @@ -906,7 +906,7 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) lman.acceptSlot_flag = 0;; lman.parent_child = MODE_NEUTRAL; rfu_LMAN_managerChangeAgbClockMaster(); - if (reqCommandId == 61) + if (reqCommandId == ID_STOP_MODE_REQ) { rfu_LMAN_endManager(); } -- cgit v1.2.3 From c0373e9e93ff07edebc120e317b6473c171a946a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 10 Feb 2020 11:11:25 -0500 Subject: Address review comments --- src/link_rfu.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/link_rfu.c') diff --git a/src/link_rfu.c b/src/link_rfu.c index 89245398d..2a65978e7 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -115,7 +115,7 @@ u8 rfu_LMAN_establishConnection(u8 parent_child, u16 connect_period, u16 name_ac u8 i; u16 *serial_list; - if (lman.state != LMAN_STATE_READY && (lman.state != LMAN_STATE_WAIT_RECV_CHILD_NAME || parent_child != 1)) + if (lman.state != LMAN_STATE_READY && (lman.state != LMAN_STATE_WAIT_RECV_CHILD_NAME || parent_child != MODE_PARENT)) { lman.param[0] = 1; rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); @@ -143,14 +143,14 @@ u8 rfu_LMAN_establishConnection(u8 parent_child, u16 connect_period, u16 name_ac if (parent_child > 1) { lman.pcswitch_flag = 1; - parent_child = 1; + parent_child = MODE_PARENT; connect_period = 0; } else { lman.pcswitch_flag = 0; } - if (parent_child != 0) + if (parent_child != MODE_CHILD) { lman.state = LMAN_STATE_START_SEARCH_CHILD; } @@ -332,7 +332,7 @@ static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID) if (lman.linkRecovery_enable) { lman.linkRecovery_start_flag = 1; - if (lman.parent_child == 0 && reason == REASON_DISCONNECTED) + if (lman.parent_child == MODE_CHILD && reason == REASON_DISCONNECTED) { lman.linkRecovery_start_flag = 4; } @@ -846,7 +846,7 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) lman.linkRecoveryTimer.count[i] = 0; } } - if (lman.parent_child == 0) + if (lman.parent_child == MODE_CHILD) { lman.state = lman.next_state = LMAN_STATE_READY; } @@ -1145,7 +1145,7 @@ static void rfu_LMAN_CHILD_checkSendChildName2(void) static void rfu_LMAN_CHILD_linkRecoveryProcess(void) { - if (lman.parent_child == 0 && lman.linkRecovery_start_flag == 1) + if (lman.parent_child == MODE_CHILD && lman.linkRecovery_start_flag == 1) { lman.state_bak[0] = lman.state; lman.state_bak[1] = lman.next_state; -- cgit v1.2.3 From b9f1132aa65c8f79d6c2c93ad372146b0bbda094 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 10 Feb 2020 12:07:22 -0500 Subject: link_rfu.c --> AgbRfu_LinkManager.c --- src/link_rfu.c | 1380 -------------------------------------------------------- 1 file changed, 1380 deletions(-) delete mode 100644 src/link_rfu.c (limited to 'src/link_rfu.c') diff --git a/src/link_rfu.c b/src/link_rfu.c deleted file mode 100644 index 2a65978e7..000000000 --- a/src/link_rfu.c +++ /dev/null @@ -1,1380 +0,0 @@ -#include "global.h" -#include "librfu.h" -#include "link_rfu.h" - -LINK_MANAGER lman; - -static void rfu_LMAN_clearVariables(void); -static void rfu_LMAN_settingPCSWITCH(u32 rand); -static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult); -static void rfu_LMAN_MSC_callback(u16 reqCommandId); -static void rfu_LMAN_PARENT_checkRecvChildName(void); -static void rfu_LMAN_CHILD_checkSendChildName(void); -static void rfu_LMAN_CHILD_checkSendChildName2(void); -static void rfu_LMAN_CHILD_linkRecoveryProcess(void); -static u8 rfu_LMAN_CHILD_checkEnableParentCandidate(void); -static void rfu_LMAN_occureCallback(u8 msg, u8 param_count); -static void rfu_LMAN_disconnect(u8 bmDisconnectSlot); -static void rfu_LMAN_reflectCommunicationStatus(u8 bm_disconnectedSlot); -static void rfu_LMAN_checkNICommunicateStatus(void); -static void rfu_LMAN_managerChangeAgbClockMaster(void); - -u32 rfu_LMAN_REQBN_softReset_and_checkID(void) -{ - u32 id = rfu_REQBN_softReset_and_checkID(); - if (id == RFU_ID) - lman.RFU_powerOn_flag = 1; - if (lman.state != LMAN_FORCED_STOP_AND_RFU_RESET && lman.state != LMAN_STATE_SOFT_RESET_AND_CHECK_ID) - { - lman.state = lman.next_state = LMAN_STATE_READY; - } - 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 rfu_LMAN_REQ_sendData(u8 clockChangeFlag) -{ - if (gRfuLinkStatus->parentChild == MODE_CHILD) - { - if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_ON) - clockChangeFlag = TRUE; - else - clockChangeFlag = FALSE; - } - else - lman.parentAck_flag = 0; - rfu_REQ_sendData(clockChangeFlag); -} - -u8 rfu_LMAN_initializeManager(void (*LMAN_callback_p)(u8, u8), void (*MSC_callback_p)(u16)) -{ - if (LMAN_callback_p == NULL) - { - return LMAN_ERROR_ILLEGAL_PARAMETER; - } - 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 rfu_LMAN_endManager(void) -{ - CpuFill16(0, &lman, sizeof(struct linkManagerTag) - 8); - lman.parent_child = MODE_NEUTRAL; -} - -void rfu_LMAN_initializeRFU(INIT_PARAM *init_parameters) -{ - rfu_LMAN_clearVariables(); - lman.state = LMAN_STATE_SOFT_RESET_AND_CHECK_ID; - lman.next_state = LMAN_STATE_RESET; - lman.init_param = init_parameters; - lman.linkRecovery_enable = init_parameters->linkRecovery_enable; - lman.linkRecoveryTimer.count_max = init_parameters->linkRecovery_period; - lman.NI_failCounter_limit = init_parameters->NI_failCounter_limit; - if (init_parameters->fastSearchParent_flag) - { - lman.fastSearchParent_flag = 1; - } -} - -static void rfu_LMAN_clearVariables(void) -{ - u8 i; - - lman.state = lman.next_state = LMAN_STATE_READY; - lman.parent_child = MODE_NEUTRAL; - lman.pcswitch_flag = 0; - lman.child_slot = 0; - lman.connectSlot_flag_old = 0; - lman.nameAcceptTimer.active = 0; - lman.linkRecoveryTimer.active = 0; - for (i = 0; i < RFU_CHILD_MAX; i++) - { - lman.nameAcceptTimer.count[i] = 0; - lman.linkRecoveryTimer.count[i] = 0; - } -} - -void rfu_LMAN_powerDownRFU(void) -{ - lman.state = LMAN_STATE_STOP_MODE; -} - -u8 rfu_LMAN_establishConnection(u8 parent_child, u16 connect_period, u16 name_accept_period, u16 *acceptable_serialNo_list) -{ - u8 i; - u16 *serial_list; - - if (lman.state != LMAN_STATE_READY && (lman.state != LMAN_STATE_WAIT_RECV_CHILD_NAME || parent_child != MODE_PARENT)) - { - lman.param[0] = 1; - rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); - return LMAN_ERROR_MANAGER_BUSY; - } - if (rfu_getMasterSlave() == AGB_CLK_SLAVE) - { - lman.param[0] = 2; - rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); - return LMAN_ERROR_AGB_CLK_SLAVE; - } - for (i = 0, serial_list = acceptable_serialNo_list; i < 16; i++) - { - if (*serial_list++ == 0xFFFF) - { - break; - } - } - if (i == 16) - { - lman.param[0] = 4; - rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); - return LMAN_ERROR_ILLEGAL_PARAMETER; - } - if (parent_child > 1) - { - lman.pcswitch_flag = 1; - parent_child = MODE_PARENT; - connect_period = 0; - } - else - { - lman.pcswitch_flag = 0; - } - if (parent_child != MODE_CHILD) - { - lman.state = LMAN_STATE_START_SEARCH_CHILD; - } - else - { - lman.state = LMAN_STATE_START_SEARCH_PARENT; - if (lman.fastSearchParent_flag) - { - lman.fastSearchParent_flag = 2; - } - } - 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 rfu_LMAN_CHILD_connectParent(u16 parentId, u16 connect_period) -{ - u8 i; - - if (lman.state != LMAN_STATE_READY && (lman.state < 9 || lman.state > 11)) - { - lman.param[0] = 1; - rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); - return LMAN_ERROR_MANAGER_BUSY; - } - if (rfu_getMasterSlave() == AGB_CLK_SLAVE) - { - lman.param[0] = 2; - rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); - return LMAN_ERROR_AGB_CLK_SLAVE; - } - for (i = 0; i < gRfuLinkStatus->findParentCount; i++) - { - if (gRfuLinkStatus->partner[i].id == parentId) - { - break; - } - } - if (gRfuLinkStatus->findParentCount == 0 || i == gRfuLinkStatus->findParentCount) - { - lman.param[0] = 3; - rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); - return LMAN_ERROR_PID_NOT_FOUND; - } - if (lman.state == LMAN_STATE_READY || lman.state == LMAN_STATE_START_SEARCH_PARENT) - { - lman.state = LMAN_STATE_START_CONNECT_PARENT; - lman.next_state = LMAN_STATE_POLL_CONNECT_PARENT; - } - else - { - lman.state = LMAN_STATE_END_SEARCH_PARENT; - lman.next_state = LMAN_STATE_START_CONNECT_PARENT; - } - lman.work = parentId; - lman.connect_period = connect_period; - if (lman.pcswitch_flag != 0) - { - lman.pcswitch_flag = 7; - } - return 0; -} - -static void rfu_LMAN_PARENT_stopWaitLinkRecoveryAndDisconnect(u8 bm_targetSlot) -{ - u8 i; - - if ((bm_targetSlot & lman.linkRecoveryTimer.active) == 0) - return; - lman.linkRecoveryTimer.active &= ~bm_targetSlot; - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if ((bm_targetSlot >> i) & 1) - { - lman.linkRecoveryTimer.count[i] = 0; - } - } - 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 rfu_LMAN_stopManager(bool8 forced_stop_and_RFU_reset_flag) -{ - u8 msg = 0; - lman.pcswitch_flag = 0; - if (forced_stop_and_RFU_reset_flag) - { - rfu_LMAN_clearVariables(); - lman.state = LMAN_FORCED_STOP_AND_RFU_RESET; - return; - } - switch (lman.state) - { - case LMAN_STATE_START_SEARCH_CHILD: - lman.state = LMAN_STATE_WAIT_RECV_CHILD_NAME; - lman.next_state = LMAN_STATE_READY; - msg = LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED; - break; - case LMAN_STATE_POLL_SEARCH_CHILD: - lman.state = LMAN_STATE_END_SEARCH_CHILD; - lman.next_state = LMAN_STATE_WAIT_RECV_CHILD_NAME; - break; - case LMAN_STATE_END_SEARCH_CHILD: - lman.state = LMAN_STATE_END_SEARCH_CHILD; - lman.next_state = LMAN_STATE_WAIT_RECV_CHILD_NAME; - break; - case LMAN_STATE_WAIT_RECV_CHILD_NAME: - break; - case LMAN_STATE_START_SEARCH_PARENT: - lman.state = lman.next_state = LMAN_STATE_READY; - msg = LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED; - break; - case LMAN_STATE_POLL_SEARCH_PARENT: - lman.state = LMAN_STATE_END_SEARCH_PARENT; - lman.next_state = LMAN_STATE_READY; - break; - case LMAN_STATE_END_SEARCH_PARENT: - lman.state = LMAN_STATE_END_SEARCH_PARENT; - lman.next_state = LMAN_STATE_READY; - break; - case LMAN_STATE_START_CONNECT_PARENT: - lman.state = lman.next_state = LMAN_STATE_READY; - msg = LMAN_MSG_CONNECT_PARENT_FAILED; - break; - case LMAN_STATE_POLL_CONNECT_PARENT: - lman.state = LMAN_STATE_END_CONNECT_PARENT; - break; - case LMAN_STATE_END_CONNECT_PARENT: - lman.state = LMAN_STATE_END_CONNECT_PARENT; - break; - case LMAN_STATE_SEND_CHILD_NAME: - break; - case LMAN_STATE_START_LINK_RECOVERY: - lman.state = lman.state_bak[0]; - lman.next_state = lman.state_bak[1]; - rfu_LMAN_disconnect(gRfuLinkStatus->linkLossSlotFlag); - lman.param[0] = gRfuLinkStatus->linkLossSlotFlag; - rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, 1); - return; - case LMAN_STATE_POLL_LINK_RECOVERY: - lman.state = LMAN_STATE_END_LINK_RECOVERY; - break; - case LMAN_STATE_END_LINK_RECOVERY: - lman.state = LMAN_STATE_END_LINK_RECOVERY; - break; - default: - lman.state = lman.next_state = LMAN_STATE_READY; - msg = LMAN_MSG_MANAGER_STOPPED; - break; - } - if (lman.state == LMAN_STATE_READY) - { - rfu_LMAN_occureCallback(msg, 0); - } -} - -static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID) -{ - u8 i; - u8 bm_linkLossSlot; - u8 reason; - u8 bm_linkRecoverySlot; - u8 bm_disconnectSlot; - - bool8 disconnect_occure_flag = FALSE; - rfu_REQBN_watchLink(REQ_commandID, &bm_linkLossSlot, &reason, &bm_linkRecoverySlot); - if (bm_linkLossSlot) - { - lman.param[0] = bm_linkLossSlot; - lman.param[1] = reason; - if (lman.linkRecovery_enable) - { - lman.linkRecovery_start_flag = 1; - if (lman.parent_child == MODE_CHILD && reason == REASON_DISCONNECTED) - { - lman.linkRecovery_start_flag = 4; - } - if (lman.linkRecovery_start_flag == 1) - { - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if ((bm_linkLossSlot >> i) & 1) - { - lman.linkRecoveryTimer.active |= (1 << i); - lman.linkRecoveryTimer.count[i] = lman.linkRecoveryTimer.count_max; - } - } - rfu_LMAN_occureCallback(LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY, 1); - } - else - { - lman.linkRecovery_start_flag = 0; - rfu_LMAN_disconnect(bm_linkLossSlot); - disconnect_occure_flag = TRUE; - rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, 1); - } - } - else - { - rfu_LMAN_disconnect(bm_linkLossSlot); - disconnect_occure_flag = TRUE; - rfu_LMAN_occureCallback(LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED, 2); - } - rfu_LMAN_managerChangeAgbClockMaster(); - } - if (gRfuLinkStatus->parentChild == MODE_PARENT) - { - if (bm_linkRecoverySlot) - { - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if ((lman.linkRecoveryTimer.active >> i) & 1 && (bm_linkRecoverySlot >> i) & 1) - { - lman.linkRecoveryTimer.count[i] = 0; - } - } - lman.linkRecoveryTimer.active &= ~bm_linkRecoverySlot; - lman.param[0] = bm_linkRecoverySlot; - rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_SUCCESSED, 1); - } - if (lman.linkRecoveryTimer.active) - { - bm_disconnectSlot = 0; - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if ((lman.linkRecoveryTimer.active >> i) & 1 && lman.linkRecoveryTimer.count[i] && --lman.linkRecoveryTimer.count[i] == 0) - { - lman.linkRecoveryTimer.active &= ~(1 << i); - bm_disconnectSlot |= (1 << i); - } - } - if (bm_disconnectSlot) - { - rfu_LMAN_disconnect(bm_disconnectSlot); - disconnect_occure_flag = TRUE; - lman.param[0] = bm_disconnectSlot; - rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, 1); - } - } - if (!lman.linkRecoveryTimer.active) - { - lman.linkRecovery_start_flag = 0; - } - } - return disconnect_occure_flag; -} - -void rfu_LMAN_syncVBlank(void) -{ - if (rfu_syncVBlank()) - { - rfu_LMAN_occureCallback(LMAN_MSG_WATCH_DOG_TIMER_ERROR, 0); - rfu_LMAN_managerChangeAgbClockMaster(); - } -} - -void rfu_LMAN_manager_entity(u32 rand) -{ - u8 msg; - - if (lman.LMAN_callback == NULL && lman.state != LMAN_STATE_READY) - { - lman.state = LMAN_STATE_READY; - return; - } - if (lman.pcswitch_flag) - { - rfu_LMAN_settingPCSWITCH(rand); - } - while (1) - { - if (lman.state != LMAN_STATE_READY) - { - rfu_waitREQComplete(); - lman.active = 1; - switch (lman.state) - { - case LMAN_FORCED_STOP_AND_RFU_RESET: - if (rfu_LMAN_REQBN_softReset_and_checkID() == RFU_ID) - { - msg=LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET; - } - else - { - msg=LMAN_MSG_RFU_FATAL_ERROR; - } - lman.state = lman.next_state = LMAN_STATE_READY; - rfu_LMAN_occureCallback(msg, 0); - break; - case LMAN_STATE_SOFT_RESET_AND_CHECK_ID: - if (rfu_LMAN_REQBN_softReset_and_checkID() == RFU_ID) - { - lman.state = lman.next_state; - lman.next_state = LMAN_STATE_CONFIG_SYSTEM; - } - else - { - lman.state = lman.next_state = LMAN_STATE_READY; - rfu_LMAN_occureCallback(LMAN_MSG_RFU_FATAL_ERROR, 0); - } - break; - case LMAN_STATE_RESET: - rfu_REQ_reset(); - break; - case LMAN_STATE_CONFIG_SYSTEM: - rfu_REQ_configSystem(lman.init_param->availSlot_flag, lman.init_param->maxMFrame, lman.init_param->MC_TimerCount); - break; - case LMAN_STATE_CONFIG_GAME_DATA: - rfu_REQ_configGameData(lman.init_param->mboot_flag, lman.init_param->serialNo, (const u8 *)lman.init_param->gameName, lman.init_param->userName); - break; - case LMAN_STATE_START_SEARCH_CHILD: - rfu_REQ_startSearchChild(); - break; - case LMAN_STATE_POLL_SEARCH_CHILD: - rfu_REQ_pollSearchChild(); - break; - case LMAN_STATE_END_SEARCH_CHILD: - rfu_REQ_endSearchChild(); - break; - case LMAN_STATE_WAIT_RECV_CHILD_NAME: - break; - case LMAN_STATE_START_SEARCH_PARENT: - rfu_REQ_startSearchParent(); - break; - case LMAN_STATE_POLL_SEARCH_PARENT: - rfu_REQ_pollSearchParent(); - break; - case LMAN_STATE_END_SEARCH_PARENT: - rfu_REQ_endSearchParent(); - break; - case LMAN_STATE_START_CONNECT_PARENT: - rfu_REQ_startConnectParent(lman.work); - break; - case LMAN_STATE_POLL_CONNECT_PARENT: - rfu_REQ_pollConnectParent(); - break; - case LMAN_STATE_END_CONNECT_PARENT: - rfu_REQ_endConnectParent(); - break; - case LMAN_STATE_SEND_CHILD_NAME: - break; - case LMAN_STATE_START_LINK_RECOVERY: - rfu_REQ_CHILD_startConnectRecovery(gRfuLinkStatus->linkLossSlotFlag); - break; - case LMAN_STATE_POLL_LINK_RECOVERY: - rfu_REQ_CHILD_pollConnectRecovery(); - break; - case LMAN_STATE_END_LINK_RECOVERY: - rfu_REQ_CHILD_endConnectRecovery(); - break; - case LMAN_STATE_MS_CHANGE: - rfu_REQ_changeMasterSlave(); - break; - case LMAN_STATE_WAIT_CLOCK_MASTER: - break; - case LMAN_STATE_STOP_MODE: - rfu_REQ_stopMode(); - break; - case LMAN_STATE_BACK_STATE: - break; - default: - break; - } - 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 rfu_LMAN_settingPCSWITCH(u32 rand) -{ - if (lman.pcswitch_flag == 5) - { - lman.parent_child = MODE_PARENT; - lman.state = LMAN_STATE_START_SEARCH_CHILD; - lman.connect_period = lman.pcswitch_period_bak; - if (lman.connect_period) - { - lman.pcswitch_flag = 6; - } - else - { - lman.pcswitch_flag = 1; - } - } - if (lman.pcswitch_flag == 1) - { - lman.parent_child = MODE_PARENT; - lman.state = LMAN_STATE_START_SEARCH_CHILD; - lman.connect_period = rand % 140; - lman.pcswitch_period_bak = 140 - lman.connect_period; - if (lman.connect_period) - { - lman.pcswitch_flag = 2; - } - else - { - lman.pcswitch_flag = 3; - } - } - if (lman.pcswitch_flag == 3) - { - lman.parent_child = MODE_CHILD; - lman.connect_period = 40; - lman.pcswitch_flag = 4; - lman.state = LMAN_STATE_START_SEARCH_PARENT; - } -} - -static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) -{ - u8 status; - u8 *stwiRecvBuffer; - u8 i; - - if (lman.active != 0) - { - lman.active = 0; - switch (reqCommandId) - { - case ID_RESET_REQ: - if (reqResult == 0) - { - lman.state = lman.next_state; - lman.next_state = LMAN_STATE_CONFIG_GAME_DATA; - } - break; - case ID_SYSTEM_CONFIG_REQ: - if (reqResult == 0) - { - lman.state = lman.next_state; - lman.next_state = LMAN_STATE_READY; - } - break; - case ID_GAME_CONFIG_REQ: - if (reqResult == 0) - { - lman.state = lman.next_state = LMAN_STATE_READY; - rfu_LMAN_occureCallback(LMAN_MSG_INITIALIZE_COMPLETED, 0); - } - break; - case ID_SC_START_REQ: - if (reqResult == 0) - { - lman.state = lman.next_state = LMAN_STATE_POLL_SEARCH_CHILD; - } - break; - case ID_SC_POLL_REQ: - if (lman.connect_period && --lman.connect_period == 0) - { - lman.state = LMAN_STATE_END_SEARCH_CHILD; - lman.next_state = LMAN_STATE_WAIT_RECV_CHILD_NAME; - } - break; - case ID_SC_END_REQ: - if (reqResult == 0) - { - lman.state = lman.next_state; - lman.next_state = LMAN_STATE_READY; - if (lman.pcswitch_flag == 0) - { - rfu_LMAN_occureCallback(LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED, 0); - } - } - break; - case ID_SP_START_REQ: - if (reqResult == 0) - { - if (lman.fastSearchParent_flag == 1 && lman.connect_period > 1) - { - lman.connect_period--; - } - lman.state = lman.next_state = LMAN_STATE_POLL_SEARCH_PARENT; - } - break; - case ID_SP_POLL_REQ: - if (reqResult == 0) - { - status = rfu_LMAN_CHILD_checkEnableParentCandidate(); - lman.param[0] = status; - if (status) - { - rfu_LMAN_occureCallback(LMAN_MSG_PARENT_FOUND, 1); - } - if (lman.fastSearchParent_flag && lman.connect_period != 1 && gRfuLinkStatus->findParentCount == RFU_CHILD_MAX) - { - rfu_REQ_endSearchParent(); - rfu_waitREQComplete(); - lman.state = LMAN_STATE_START_SEARCH_PARENT; - lman.fastSearchParent_flag = 1; - } - } - if (lman.connect_period && --lman.connect_period == 0) - { - lman.state = LMAN_STATE_END_SEARCH_PARENT; - lman.next_state = LMAN_STATE_READY; - } - break; - case ID_SP_END_REQ: - if (reqResult == 0) - { - lman.state = lman.next_state; - if (lman.pcswitch_flag == 0) - { - if (lman.state == LMAN_STATE_READY) - { - rfu_LMAN_occureCallback(LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED, 0); - } - } - else if (lman.pcswitch_flag != 7) - { - lman.state = LMAN_STATE_START_SEARCH_CHILD; - lman.pcswitch_flag = 5; - } - } - break; - case ID_CP_START_REQ: - if (reqResult == 0) - { - lman.state = lman.next_state = LMAN_STATE_POLL_CONNECT_PARENT; - } - break; - case ID_CP_POLL_REQ: - if (reqResult == 0 && !rfu_getConnectParentStatus(&status, &lman.child_slot) && !status) - { - lman.state = LMAN_STATE_END_CONNECT_PARENT; - } - if (lman.connect_period && --lman.connect_period == 0) - { - lman.state = LMAN_STATE_END_CONNECT_PARENT; - } - break; - case ID_CP_END_REQ: - if (reqResult == 0 && !rfu_getConnectParentStatus(&status, &lman.child_slot)) - { - if (!status) - { - lman.state = LMAN_STATE_MS_CHANGE; - lman.next_state = LMAN_STATE_SEND_CHILD_NAME; - lman.work = 0x22; - lman.param[0] = lman.child_slot; - } - else - { - lman.state = lman.next_state = LMAN_STATE_READY; - lman.work = 0x23; - lman.param[0] = status; - if (lman.pcswitch_flag) - { - lman.pcswitch_flag = 3; - lman.state = LMAN_STATE_START_SEARCH_PARENT; - } - } - rfu_LMAN_occureCallback(lman.work, 0x01); - lman.work = 0; - } - break; - case ID_CPR_START_REQ: - if (reqResult == 0) - { - lman.param[0] = gRfuLinkStatus->linkLossSlotFlag; - lman.state = lman.next_state = LMAN_STATE_POLL_LINK_RECOVERY; - for (lman.child_slot = 0; lman.child_slot < RFU_CHILD_MAX; lman.child_slot++) - { - if ((gRfuLinkStatus->linkLossSlotFlag >> lman.child_slot) & 1) - { - break; - } - } - } - break; - case ID_CPR_POLL_REQ: - if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&status) && status < 2) - { - lman.state = LMAN_STATE_END_LINK_RECOVERY; - } - if (lman.linkRecoveryTimer.count[lman.child_slot] && --lman.linkRecoveryTimer.count[lman.child_slot] == 0) - { - lman.state = LMAN_STATE_END_LINK_RECOVERY; - } - break; - case ID_CPR_END_REQ: - if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&status)) - { - if (!status) - { - lman.state = LMAN_STATE_MS_CHANGE; - lman.next_state = LMAN_STATE_BACK_STATE; - lman.work = 0x32; - } - else - { - lman.state = lman.next_state = LMAN_STATE_READY; - rfu_LMAN_disconnect(gRfuLinkStatus->linkLossSlotFlag); - lman.work = 0x33; - } - 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 (lman.next_state == LMAN_STATE_BACK_STATE) - { - lman.state = lman.state_bak[0]; - lman.next_state = lman.state_bak[1]; - lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_ON; - rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_SLAVE, 0); - } - else if (lman.next_state == LMAN_STATE_SEND_CHILD_NAME) - { - lman.state = lman.next_state; - lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_ON; - rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_SLAVE, 0); - lman.nameAcceptTimer.active |= 1 << lman.child_slot; - lman.nameAcceptTimer.count[lman.child_slot] = lman.nameAcceptTimer.count_max; - rfu_clearSlot(TYPE_NI_SEND, lman.child_slot); - status = rfu_NI_CHILD_setSendGameName(lman.child_slot, 0x0e); - if (status) - { - lman.state = lman.next_state = LMAN_STATE_READY; - rfu_LMAN_managerChangeAgbClockMaster(); - rfu_LMAN_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); - lman.param[0] = status; - rfu_LMAN_occureCallback(LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED, 1); - } - } - } - break; - case ID_STOP_MODE_REQ: - if (reqResult == 0) - { - lman.state = lman.next_state = LMAN_STATE_READY; - rfu_LMAN_occureCallback(LMAN_MSG_RFU_POWER_DOWN, 0); - } - break; - } - lman.active = 1; - } - else if (reqResult == 3 && lman.msc_exe_flag && (reqCommandId == ID_DATA_TX_REQ || reqCommandId == ID_DATA_RX_REQ || reqCommandId == ID_MS_CHANGE_REQ)) - { - rfu_REQ_RFUStatus(); - rfu_waitREQComplete(); - rfu_getRFUStatus(&status); - if (status == 0 && gRfuLinkStatus->parentChild == MODE_CHILD) - { - stwiRecvBuffer = rfu_getSTWIRecvBuffer() + 4; - *stwiRecvBuffer++ = gRfuLinkStatus->connSlotFlag; - *stwiRecvBuffer = REASON_LINK_LOSS; - rfu_LMAN_linkWatcher(ID_DISCONNECTED_AND_CHANGE_REQ); - reqResult = 0; - } - } - switch (reqCommandId) - { - case ID_DISCONNECT_REQ: - if (reqResult == 0) - { - lman.param[0] = *(rfu_getSTWIRecvBuffer() + 8); - rfu_LMAN_reflectCommunicationStatus(lman.param[0]); - if (lman.linkRecoveryTimer.active) - { - lman.linkRecoveryTimer.active &= ~lman.param[0]; - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if ((lman.param[0] >> i) & 1) - { - lman.linkRecoveryTimer.count[i] = 0; - } - } - if (lman.parent_child == MODE_CHILD) - { - lman.state = lman.next_state = LMAN_STATE_READY; - } - } - status = lman.acceptSlot_flag & lman.param[0]; - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if ((status >> i) & 1 && lman.acceptCount) - { - lman.acceptCount--; - } - } - lman.acceptSlot_flag &= ~lman.param[0]; - if (lman.pcswitch_flag) - { - if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) - { - if (lman.pcswitch_flag == 8) - { - lman.connect_period = lman.pcswitch_period_bak; - lman.pcswitch_flag = 6; - lman.state = LMAN_STATE_POLL_SEARCH_CHILD; - } - else if (lman.state != LMAN_STATE_POLL_SEARCH_CHILD && lman.state != LMAN_STATE_END_SEARCH_CHILD) - { - lman.pcswitch_flag = 1; - lman.state = LMAN_STATE_START_SEARCH_CHILD; - } - } - } - if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) - { - if (lman.state == LMAN_STATE_READY) - { - lman.parent_child = MODE_NEUTRAL; - } - } - if (lman.active == 0) - { - rfu_LMAN_occureCallback(LMAN_MSG_LINK_DISCONNECTED_BY_USER, 1); - } - } - break; - case ID_DATA_RX_REQ: - rfu_LMAN_CHILD_checkSendChildName2(); - if (gRfuLinkStatus->parentChild != MODE_NEUTRAL) - { - rfu_LMAN_occureCallback(LMAN_MSG_RECV_DATA_REQ_COMPLETED, 0); - } - break; - case ID_RESET_REQ: - case ID_STOP_MODE_REQ: - if (reqResult == 0) - { - lman.reserveDisconnectSlot_flag = 0; - lman.acceptCount = 0; - lman.acceptSlot_flag = 0;; - lman.parent_child = MODE_NEUTRAL; - rfu_LMAN_managerChangeAgbClockMaster(); - if (reqCommandId == ID_STOP_MODE_REQ) - { - rfu_LMAN_endManager(); - } - } - break; - } - if (reqResult != 0) - { - if (reqCommandId == ID_SP_START_REQ && reqResult != 0 && lman.pcswitch_flag == 4) - { - gRfuLinkStatus->parentChild = MODE_PARENT; - gRfuLinkStatus->connSlotFlag = 0xF; - rfu_LMAN_disconnect(15); - rfu_waitREQComplete(); - return; - } - else - { - lman.param[0] = reqCommandId; - lman.param[1] = reqResult; - if (lman.active) - { - lman.state = lman.next_state = LMAN_STATE_READY; - } - rfu_LMAN_occureCallback(LMAN_MSG_REQ_API_ERROR, 2); - rfu_LMAN_managerChangeAgbClockMaster(); - } - } - if (reqCommandId == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ) - { - rfu_LMAN_occureCallback(LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA, 0); - rfu_LMAN_managerChangeAgbClockMaster(); - } -} - -static void rfu_LMAN_MSC_callback(u16 reqCommandId) -{ - u8 active_bak; - u8 thisAck_flag; - - active_bak = lman.active; - lman.active = 0; - lman.msc_exe_flag = 1; - if (gRfuLinkStatus->parentChild == MODE_CHILD) - { - rfu_LMAN_linkWatcher(reqCommandId); - if (lman.childClockSlave_flag != RFU_CHILD_CLOCK_SLAVE_ON) - { - rfu_LMAN_managerChangeAgbClockMaster(); - lman.msc_exe_flag = 0; - lman.active = active_bak; - return; - } - } - else - { - if (!rfu_UNI_PARENT_getDRAC_ACK(&thisAck_flag)) - { - lman.parentAck_flag |= thisAck_flag; - } - } - if (lman.MSC_callback != NULL) - { - lman.MSC_callback(reqCommandId); - rfu_waitREQComplete(); - if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_OFF_REQ) - { - rfu_LMAN_managerChangeAgbClockMaster(); - } - } - lman.msc_exe_flag = 0; - lman.active = active_bak; -} - -static void rfu_LMAN_PARENT_checkRecvChildName(void) -{ - u8 newSlot; - u8 newAcceptSlot; - u8 i; - u8 flags; - u8 tgtSlot; - const u16 *ptr; - - if (lman.state == LMAN_STATE_START_SEARCH_CHILD || lman.state == LMAN_STATE_POLL_SEARCH_CHILD || lman.state == LMAN_STATE_END_SEARCH_CHILD || lman.state == LMAN_STATE_WAIT_RECV_CHILD_NAME) - { - newSlot = ((gRfuLinkStatus->connSlotFlag ^ lman.connectSlot_flag_old) & gRfuLinkStatus->connSlotFlag) & ~gRfuLinkStatus->getNameFlag; - lman.connectSlot_flag_old = gRfuLinkStatus->connSlotFlag; - if (newSlot) - { - lman.param[0] = newSlot; - rfu_LMAN_occureCallback(LMAN_MSG_NEW_CHILD_CONNECT_DETECTED, 1); - } - newAcceptSlot = 0x00; - for (i = 0; i < RFU_CHILD_MAX; i++) - { - tgtSlot = 1 << i; - flags = 0x00; - if (newSlot & tgtSlot) - { - lman.nameAcceptTimer.count[i] = lman.nameAcceptTimer.count_max; - lman.nameAcceptTimer.active |= tgtSlot; - } - else if (lman.nameAcceptTimer.active & tgtSlot) - { - if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS) - { - if (gRfuSlotStatusNI[i]->recv.dataType == 1) // Game identification information - { - flags = 0x02; - for (ptr = lman.acceptable_serialNo_list; *ptr != 0xFFFF; ptr++) - { - if (gRfuLinkStatus->partner[i].serialNo == *ptr) - { - lman.acceptSlot_flag |= tgtSlot; - lman.acceptCount++; - newAcceptSlot |= tgtSlot; - flags |= 0x01; - break; - } - } - if (!(flags & 0x01)) - { - flags |= 0x04; - } - } - } - else if (--lman.nameAcceptTimer.count[i] == 0) - { - flags = 0x06; - } - if (flags & 0x02) - { - lman.nameAcceptTimer.active &= ~tgtSlot; - lman.nameAcceptTimer.count[i] = 0; - rfu_clearSlot(TYPE_NI_RECV, i); - } - if (flags & 0x04) - { - lman.reserveDisconnectSlot_flag |= tgtSlot; - } - } - } - if (newAcceptSlot) - { - lman.param[0] = newAcceptSlot; - rfu_LMAN_occureCallback(LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED, 1); - } - if (lman.reserveDisconnectSlot_flag) - { - flags = 0x01; - if (gRfuLinkStatus->sendSlotUNIFlag && ((lman.parentAck_flag & lman.acceptSlot_flag) != lman.acceptSlot_flag)) - { - flags = 0x00; - } - if (flags) - { - rfu_LMAN_disconnect(lman.reserveDisconnectSlot_flag); - lman.param[0] = lman.reserveDisconnectSlot_flag; - lman.reserveDisconnectSlot_flag = 0; - rfu_LMAN_occureCallback(LMAN_MSG_NEW_CHILD_CONNECT_REJECTED, 1); - } - } - if (lman.nameAcceptTimer.active == 0 && lman.state == LMAN_STATE_WAIT_RECV_CHILD_NAME) - { - if (lman.pcswitch_flag == 0) - { - lman.state = lman.next_state = LMAN_STATE_READY; - rfu_LMAN_occureCallback(LMAN_MSG_END_WAIT_CHILD_NAME, 0); - } - else - { - if (lman.pcswitch_flag == 2) - { - lman.pcswitch_flag = 3; - lman.state = LMAN_STATE_START_SEARCH_PARENT; - } - else - { - lman.pcswitch_flag = 1; - lman.state = LMAN_STATE_START_SEARCH_CHILD; - } - if (lman.acceptSlot_flag) - { - lman.connect_period = 0; - lman.pcswitch_flag = 8; - lman.state = LMAN_STATE_START_SEARCH_CHILD; - } - } - } - } -} - -static void rfu_LMAN_CHILD_checkSendChildName(void) -{ - u16 imeBak = REG_IME; - REG_IME = 0; - if (lman.state == LMAN_STATE_SEND_CHILD_NAME) - { - if (--lman.nameAcceptTimer.count[lman.child_slot] == 0 || gRfuSlotStatusNI[lman.child_slot]->send.state == SLOT_STATE_SEND_FAILED) - { - rfu_LMAN_requestChangeAgbClockMaster(); - lman.state = LMAN_STATE_WAIT_CHANGE_CLOCK_MASTER; - rfu_clearSlot(TYPE_NI_SEND, lman.child_slot); - lman.nameAcceptTimer.active &= ~(1 << lman.child_slot); - lman.nameAcceptTimer.count[lman.child_slot] = 0; - } - } - REG_IME = imeBak; - if (lman.state == LMAN_STATE_WAIT_CHANGE_CLOCK_MASTER) - { - if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_ON) - { - rfu_LMAN_requestChangeAgbClockMaster(); - } - if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_OFF) - { - lman.state = lman.next_state = LMAN_STATE_READY; - rfu_LMAN_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); - lman.param[0] = 0; - rfu_LMAN_occureCallback(LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED, 1); - } - } -} - -static void rfu_LMAN_CHILD_checkSendChildName2(void) -{ - if (lman.state == LMAN_STATE_SEND_CHILD_NAME && gRfuSlotStatusNI[lman.child_slot]->send.state == SLOT_STATE_SEND_SUCCESS) - { - lman.state = lman.next_state = LMAN_STATE_READY; - rfu_clearSlot(TYPE_NI_SEND, lman.child_slot); - lman.nameAcceptTimer.active &= ~(1 << lman.child_slot); - lman.nameAcceptTimer.count[lman.child_slot] = 0; - rfu_LMAN_occureCallback(LMAN_MSG_CHILD_NAME_SEND_COMPLETED, 0); - } -} - -static void rfu_LMAN_CHILD_linkRecoveryProcess(void) -{ - if (lman.parent_child == MODE_CHILD && lman.linkRecovery_start_flag == 1) - { - lman.state_bak[0] = lman.state; - lman.state_bak[1] = lman.next_state; - lman.state = LMAN_STATE_START_LINK_RECOVERY; - lman.next_state = LMAN_STATE_POLL_LINK_RECOVERY; - lman.linkRecovery_start_flag = 2; - } -} - -static u8 rfu_LMAN_CHILD_checkEnableParentCandidate(void) -{ - u8 i; - u16 *serialNo; - u8 flags = 0x00; - - for (i = 0; i < gRfuLinkStatus->findParentCount; i++) - { - for (serialNo = lman.acceptable_serialNo_list; *serialNo != 0xFFFF; serialNo++) - { - if (gRfuLinkStatus->partner[i].serialNo == *serialNo) - { - flags |= (1 << i); - } - } - } - return flags; -} - -static void rfu_LMAN_occureCallback(u8 msg, u8 param_count) -{ - if (lman.LMAN_callback != NULL) - { - lman.LMAN_callback(msg, param_count); - } - lman.param[0] = lman.param[1] = 0; -} - -static void rfu_LMAN_disconnect(u8 bm_disconnectedSlot) -{ - u8 active_bak = lman.active; - lman.active = 1; - rfu_REQ_disconnect(bm_disconnectedSlot); - rfu_waitREQComplete(); - lman.active = active_bak; -} - -static void rfu_LMAN_reflectCommunicationStatus(u8 bm_disconnectedSlot) -{ - u8 i; - - if (gRfuLinkStatus->sendSlotNIFlag) - { - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->send.bmSlot & bm_disconnectedSlot) - { - rfu_changeSendTarget(TYPE_NI, i, gRfuSlotStatusNI[i]->send.bmSlot & ~bm_disconnectedSlot); - } - } - } - if (gRfuLinkStatus->recvSlotNIFlag) - { - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->recv.bmSlot & bm_disconnectedSlot) - { - rfu_NI_stopReceivingData(i); - } - } - } - if (gRfuLinkStatus->sendSlotUNIFlag) - { - gRfuLinkStatus->sendSlotUNIFlag &= ~bm_disconnectedSlot; - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if (gRfuSlotStatusUNI[i]->send.state == SLOT_STATE_SEND_UNI && bm_disconnectedSlot & gRfuSlotStatusUNI[i]->send.bmSlot) - { - gRfuSlotStatusUNI[i]->send.bmSlot &= ~bm_disconnectedSlot; - } - } - } -} - -static void rfu_LMAN_checkNICommunicateStatus(void) -{ - u8 i; - u8 j; - u8 flags; - - if (lman.NI_failCounter_limit) - { - if (gRfuLinkStatus->sendSlotNIFlag) - { - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG) - { - flags = 0; - for (j = 0; j < RFU_CHILD_MAX; j++) - { - if ((gRfuSlotStatusNI[i]->send.bmSlot >> j) & 1 && gRfuSlotStatusNI[j]->send.failCounter > lman.NI_failCounter_limit) - { - flags |= (1 << j); - } - if (flags) - { - rfu_changeSendTarget(TYPE_NI, i, flags ^ gRfuSlotStatusNI[i]->send.bmSlot); - } - } - } - } - } - if (gRfuLinkStatus->recvSlotNIFlag) - { - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->recv.failCounter > lman.NI_failCounter_limit) - { - rfu_NI_stopReceivingData(i); - } - } - } - } -} - -void rfu_LMAN_setMSCCallback(void (*MSC_callback_p)(u16)) -{ - lman.MSC_callback = MSC_callback_p; - rfu_setMSCCallback(rfu_LMAN_MSC_callback); -} - -static void rfu_LMAN_setLMANCallback(void (*func)(u8, u8)) -{ - lman.LMAN_callback = func; -} - -u8 rfu_LMAN_setLinkRecovery(u8 enable_flag, u16 recovery_period) -{ - u16 imeBak; - if (lman.linkRecovery_enable && enable_flag == 0 && lman.linkRecoveryTimer.active) - { - return LMAN_ERROR_NOW_LINK_RECOVERY; - } - imeBak = REG_IME; - REG_IME = 0; - lman.linkRecovery_enable = enable_flag; - lman.linkRecoveryTimer.count_max = recovery_period; - REG_IME = imeBak; - return 0; -} - -static u8 rfu_LMAN_setNIFailCounterLimit(u16 NI_failCounter_limit) -{ - if (gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag) - { - lman.param[0] = 6; - rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); - return LMAN_ERROR_NOW_COMMUNICATION; - } - lman.NI_failCounter_limit = NI_failCounter_limit; - return 0; -} - -static u8 rfu_LMAN_setFastSearchParent(u8 enable_flag) -{ - if (lman.state == LMAN_STATE_START_SEARCH_PARENT || lman.state == LMAN_STATE_POLL_SEARCH_PARENT || lman.state == LMAN_STATE_END_SEARCH_PARENT) - { - lman.param[0] = 7; - rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); - return LMAN_ERROR_NOW_SEARCH_PARENT; - } - if (enable_flag) - { - lman.fastSearchParent_flag = 1; - } - else - { - lman.fastSearchParent_flag = 0; - } - return 0; -} - -static void rfu_LMAN_managerChangeAgbClockMaster(void) -{ - if (lman.childClockSlave_flag != RFU_CHILD_CLOCK_SLAVE_OFF) - { - lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_OFF; - rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_MASTER, 0); - } -} - -void rfu_LMAN_requestChangeAgbClockMaster(void) -{ - if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_OFF) - { - rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_MASTER, 0); - } - else if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_ON) - { - lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_OFF_REQ; - } -} - -void rfu_LMAN_forceChangeSP(void) -{ - if (lman.pcswitch_flag) - { - switch (lman.state) - { - case LMAN_STATE_START_SEARCH_CHILD: - lman.pcswitch_flag = 3; - lman.state = LMAN_STATE_START_SEARCH_PARENT; - break; - case LMAN_STATE_POLL_SEARCH_CHILD: - lman.pcswitch_flag = 2; - lman.connect_period = 1; - break; - case LMAN_STATE_END_SEARCH_CHILD: - case LMAN_STATE_WAIT_RECV_CHILD_NAME: - lman.pcswitch_flag = 2; - break; - case LMAN_STATE_START_SEARCH_PARENT: - case LMAN_STATE_POLL_SEARCH_PARENT: - lman.connect_period = 40; - break; - case LMAN_STATE_END_SEARCH_PARENT: - lman.connect_period = 40; - lman.state = LMAN_STATE_POLL_SEARCH_PARENT; - break; - } - } -} -- cgit v1.2.3