summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/librfu.s3255
-rw-r--r--include/librfu.h75
-rw-r--r--src/librfu_rfu.c1095
3 files changed, 1139 insertions, 3286 deletions
diff --git a/asm/librfu.s b/asm/librfu.s
index d3b48f07e..c98ee854c 100644
--- a/asm/librfu.s
+++ b/asm/librfu.s
@@ -5,3261 +5,6 @@
.text
- thumb_func_start rfu_REQBN_watchLink
-rfu_REQBN_watchLink: @ 81E13F0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- mov r8, r1
- str r2, [sp]
- str r3, [sp, 0x4]
- lsls r0, 16
- lsrs r5, r0, 16
- movs r0, 0
- str r0, [sp, 0x8]
- movs r1, 0
- str r1, [sp, 0xC]
- mov r2, r8
- strb r1, [r2]
- mov r0, sp
- ldrb r1, [r0, 0xC]
- ldr r0, [sp]
- strb r1, [r0]
- mov r2, sp
- ldrb r0, [r2, 0xC]
- ldr r2, [sp, 0x4]
- strb r0, [r2]
- ldr r4, _081E1490 @ =gRfuLinkStatus
- ldr r0, [r4]
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _081E142E
- b _081E178E
-_081E142E:
- ldr r0, _081E1494 @ =gRfuState
- ldr r0, [r0]
- ldrb r0, [r0, 0x14]
- cmp r0, 0
- bne _081E143A
- b _081E178E
-_081E143A:
- ldr r3, _081E1498 @ =gRfuStatic
- ldr r2, [r3]
- ldrb r1, [r2]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _081E144E
- movs r0, 0xB4
- lsls r0, 1
- strh r0, [r2, 0x20]
-_081E144E:
- ldr r1, [r3]
- ldrb r0, [r1, 0x6]
- cmp r0, 0
- bne _081E1460
- ldr r0, [r4]
- ldrb r0, [r0, 0x9]
- strb r0, [r1, 0x6]
- movs r1, 0x1
- str r1, [sp, 0x8]
-_081E1460:
- lsls r0, r5, 24
- lsrs r0, 24
- cmp r0, 0x29
- bne _081E14A0
- ldr r0, _081E149C @ =gRfuFixed
- ldr r0, [r0]
- adds r0, 0xDC
- ldr r1, [r0]
- ldrb r0, [r1, 0x4]
- mov r2, r8
- strb r0, [r2]
- ldrb r0, [r1, 0x5]
- ldr r1, [sp]
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081E148A
- ldr r0, [r4]
- ldrb r0, [r0, 0x2]
- strb r0, [r2]
-_081E148A:
- movs r2, 0x2
- str r2, [sp, 0x8]
- b _081E14F8
- .align 2, 0
-_081E1490: .4byte gRfuLinkStatus
-_081E1494: .4byte gRfuState
-_081E1498: .4byte gRfuStatic
-_081E149C: .4byte gRfuFixed
-_081E14A0:
- movs r0, 0x9B
- lsls r0, 1
- cmp r5, r0
- bne _081E14F0
- ldr r0, _081E154C @ =gRfuFixed
- ldr r0, [r0]
- adds r0, 0xDC
- ldr r0, [r0]
- ldrb r6, [r0, 0x5]
- ldr r0, [r4]
- ldrb r0, [r0, 0x2]
- eors r6, r0
- ands r6, r0
- mov r0, r8
- strb r6, [r0]
- movs r0, 0x1
- ldr r1, [sp]
- strb r0, [r1]
- movs r5, 0
-_081E14C6:
- mov r2, r8
- ldrb r0, [r2]
- asrs r0, r5
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081E14E6
- ldr r0, _081E1550 @ =gRfuLinkStatus
- ldr r0, [r0]
- adds r0, 0xA
- adds r0, r5
- movs r1, 0
- strb r1, [r0]
- adds r0, r5, 0
- bl rfu_STC_removeLinkData
-_081E14E6:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _081E14C6
-_081E14F0:
- ldr r0, [sp, 0x8]
- cmp r0, 0
- bne _081E14F8
- b _081E178E
-_081E14F8:
- ldr r4, _081E154C @ =gRfuFixed
- ldr r0, [r4]
- adds r0, 0xDC
- ldr r0, [r0]
- ldr r1, [r0]
- str r1, [sp, 0x10]
- ldr r0, [r0, 0x4]
- str r0, [sp, 0x14]
- ldr r0, _081E1554 @ =rfu_CB_defaultCallback
- bl STWI_set_Callback_M
- bl STWI_send_LinkStatusREQ
- bl STWI_poll_CommandEnd
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0xC]
- cmp r0, 0
- bne _081E1558
- ldr r0, [r4]
- adds r0, 0xDC
- ldr r0, [r0]
- adds r2, r0, 0x4
- movs r5, 0
- ldr r3, _081E1550 @ =gRfuLinkStatus
-_081E152C:
- ldr r0, [r3]
- adds r0, 0xA
- adds r0, r5
- ldrb r1, [r2]
- strb r1, [r0]
- adds r2, 0x1
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _081E152C
- movs r2, 0
- mov r9, r2
- movs r5, 0
- b _081E1564
- .align 2, 0
-_081E154C: .4byte gRfuFixed
-_081E1550: .4byte gRfuLinkStatus
-_081E1554: .4byte rfu_CB_defaultCallback
-_081E1558:
- movs r0, 0x11
- ldr r1, [sp, 0xC]
- bl rfu_STC_REQ_callback
- ldr r0, [sp, 0xC]
- b _081E1790
-_081E1564:
- movs r0, 0x80
- lsls r0, 17
- lsls r0, r5
- lsrs r6, r0, 24
- adds r0, r5, 0x1
- mov r10, r0
- ldr r1, [sp, 0xC]
- cmp r1, 0
- beq _081E1578
- b _081E1742
-_081E1578:
- ldr r2, [sp, 0x8]
- cmp r2, 0x1
- bne _081E164E
- ldr r4, _081E15B8 @ =gRfuLinkStatus
- ldr r1, [r4]
- ldrb r0, [r1, 0x2]
- ands r0, r6
- cmp r0, 0
- beq _081E164E
- adds r0, r1, 0
- adds r0, 0xA
- adds r0, r5
- ldrb r0, [r0]
- cmp r0, 0
- bne _081E1640
- ldrb r0, [r1]
- cmp r0, 0x1
- bne _081E15C0
- ldr r2, _081E15BC @ =gRfuStatic
- ldr r1, [r2]
- adds r1, 0xA
- adds r1, r5
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r0, [r2]
- adds r0, 0xA
- adds r0, r5
- ldrb r0, [r0]
- cmp r0, 0x3
- bls _081E164E
- b _081E1626
- .align 2, 0
-_081E15B8: .4byte gRfuLinkStatus
-_081E15BC: .4byte gRfuStatic
-_081E15C0:
- bl STWI_send_SystemStatusREQ
- bl STWI_poll_CommandEnd
- lsls r0, 16
- cmp r0, 0
- bne _081E164E
- ldr r0, _081E15F0 @ =gRfuFixed
- ldr r0, [r0]
- adds r0, 0xDC
- ldr r0, [r0]
- ldrb r0, [r0, 0x7]
- cmp r0, 0
- bne _081E15F4
- mov r2, r8
- ldrb r1, [r2]
- adds r0, r6, 0
- orrs r0, r1
- strb r0, [r2]
- mov r0, sp
- ldrb r1, [r0, 0x8]
- ldr r0, [sp]
- b _081E164C
- .align 2, 0
-_081E15F0: .4byte gRfuFixed
-_081E15F4:
- ldr r2, _081E163C @ =gRfuStatic
- ldr r1, [r2]
- adds r1, 0xA
- adds r1, r5
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- ldr r2, [r2]
- lsrs r0, 24
- ldrh r1, [r2, 0x1A]
- cmp r0, r1
- bls _081E164E
- adds r0, r2, 0
- adds r0, 0xA
- adds r0, r5
- mov r2, sp
- ldrb r2, [r2, 0xC]
- strb r2, [r0]
- ldr r0, [r4]
- ldrb r0, [r0, 0x2]
- bl STWI_send_DisconnectREQ
- bl STWI_poll_CommandEnd
-_081E1626:
- mov r0, r8
- ldrb r1, [r0]
- adds r0, r6, 0
- orrs r0, r1
- mov r1, r8
- strb r0, [r1]
- mov r2, sp
- ldrb r0, [r2, 0x8]
- ldr r2, [sp]
- strb r0, [r2]
- b _081E164E
- .align 2, 0
-_081E163C: .4byte gRfuStatic
-_081E1640:
- ldr r0, _081E16B0 @ =gRfuStatic
- ldr r0, [r0]
- adds r0, 0xA
- adds r0, r5
- mov r1, sp
- ldrb r1, [r1, 0xC]
-_081E164C:
- strb r1, [r0]
-_081E164E:
- ldr r2, _081E16B4 @ =gRfuLinkStatus
- mov r12, r2
- ldr r1, [r2]
- ldrb r7, [r1]
- adds r0, r5, 0x1
- mov r10, r0
- cmp r7, 0x1
- bne _081E1742
- adds r0, r1, 0
- adds r0, 0xA
- adds r4, r0, r5
- ldrb r3, [r4]
- cmp r3, 0
- beq _081E1742
- ldrb r2, [r1, 0x3]
- adds r0, r6, 0
- ands r0, r2
- cmp r0, 0
- beq _081E16BE
- cmp r3, 0xA
- bls _081E16B8
- ldr r2, [sp, 0x4]
- ldrb r1, [r2]
- adds r0, r6, 0
- orrs r0, r1
- strb r0, [r2]
- mov r0, r12
- ldr r2, [r0]
- ldrb r1, [r2, 0x2]
- adds r0, r6, 0
- orrs r0, r1
- movs r3, 0
- strb r0, [r2, 0x2]
- mov r2, r12
- ldr r1, [r2]
- ldrb r0, [r1, 0x3]
- bics r0, r6
- strb r0, [r1, 0x3]
- ldr r1, [r2]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- ldr r0, _081E16B0 @ =gRfuStatic
- ldr r0, [r0]
- adds r0, 0xA
- adds r0, r5
- strb r3, [r0]
- b _081E1742
- .align 2, 0
-_081E16B0: .4byte gRfuStatic
-_081E16B4: .4byte gRfuLinkStatus
-_081E16B8:
- movs r0, 0
- strb r0, [r4]
- b _081E1742
-_081E16BE:
- ldrb r0, [r1, 0x2]
- orrs r0, r2
- ands r0, r6
- cmp r0, 0
- bne _081E1742
- bl STWI_send_SlotStatusREQ
- bl STWI_poll_CommandEnd
- ldr r0, _081E1708 @ =gRfuFixed
- ldr r0, [r0]
- adds r0, 0xDC
- ldr r2, [r0]
- ldrb r0, [r2, 0x1]
- subs r0, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- adds r2, 0x8
- cmp r3, 0
- beq _081E1742
- ldrh r4, [r2]
- ldrb r0, [r2, 0x2]
- cmp r0, r5
- bne _081E1710
- ldr r0, _081E170C @ =gRfuStatic
- ldr r0, [r0]
- lsls r1, r5, 1
- adds r0, 0x12
- adds r0, r1
- ldrh r0, [r0]
- cmp r4, r0
- bne _081E1710
- lsls r7, r5
- mov r0, r9
- orrs r0, r7
- lsls r0, 24
- b _081E173E
- .align 2, 0
-_081E1708: .4byte gRfuFixed
-_081E170C: .4byte gRfuStatic
-_081E1710:
- adds r2, 0x4
- subs r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _081E1742
- ldrh r4, [r2]
- ldrb r0, [r2, 0x2]
- cmp r0, r5
- bne _081E1710
- ldr r0, _081E17A0 @ =gRfuStatic
- ldr r0, [r0]
- lsls r1, r5, 1
- adds r0, 0x12
- adds r0, r1
- ldrh r0, [r0]
- cmp r4, r0
- bne _081E1710
- movs r0, 0x1
- lsls r0, r5
- mov r1, r9
- orrs r1, r0
- lsls r0, r1, 24
-_081E173E:
- lsrs r0, 24
- mov r9, r0
-_081E1742:
- ldr r0, _081E17A4 @ =gRfuLinkStatus
- ldr r0, [r0]
- ldrb r1, [r0, 0x2]
- mov r2, r8
- ldrb r0, [r2]
- ands r0, r1
- ands r6, r0
- cmp r6, 0
- beq _081E175C
- adds r0, r5, 0
- movs r1, 0
- bl rfu_STC_removeLinkData
-_081E175C:
- mov r1, r10
- lsls r0, r1, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bhi _081E1768
- b _081E1564
-_081E1768:
- mov r2, r9
- cmp r2, 0
- beq _081E1778
- mov r0, r9
- bl STWI_send_DisconnectREQ
- bl STWI_poll_CommandEnd
-_081E1778:
- ldr r1, _081E17A8 @ =gRfuFixed
- ldr r0, [r1]
- adds r0, 0xDC
- ldr r0, [r0]
- ldr r2, [sp, 0x10]
- str r2, [r0]
- ldr r0, [r1]
- adds r0, 0xDC
- ldr r0, [r0]
- ldr r1, [sp, 0x14]
- str r1, [r0, 0x4]
-_081E178E:
- movs r0, 0
-_081E1790:
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_081E17A0: .4byte gRfuStatic
-_081E17A4: .4byte gRfuLinkStatus
-_081E17A8: .4byte gRfuFixed
- thumb_func_end rfu_REQBN_watchLink
-
- thumb_func_start rfu_STC_removeLinkData
-rfu_STC_removeLinkData: @ 81E17AC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r12, r1
- movs r0, 0x80
- lsls r0, 17
- lsls r0, r7
- lsrs r5, r0, 24
- ldr r1, _081E1850 @ =gRfuLinkStatus
- ldr r4, [r1]
- ldrb r0, [r4, 0x2]
- ands r0, r5
- mov r8, r1
- cmp r0, 0
- beq _081E17DE
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- beq _081E17DE
- subs r0, 0x1
- strb r0, [r4, 0x1]
-_081E17DE:
- mov r3, r8
- ldr r2, [r3]
- mvns r6, r5
- ldrb r1, [r2, 0x2]
- adds r0, r6, 0
- ands r0, r1
- strb r0, [r2, 0x2]
- ldr r2, [r3]
- ldrb r1, [r2, 0x3]
- adds r0, r5, 0
- orrs r0, r1
- strb r0, [r2, 0x3]
- ldr r3, [r3]
- ldr r0, [r3]
- ldr r1, _081E1854 @ =0x00ff00ff
- ands r0, r1
- cmp r0, 0
- bne _081E1806
- movs r0, 0xFF
- strb r0, [r3]
-_081E1806:
- mov r0, r12
- cmp r0, 0
- beq _081E1844
- mov r1, sp
- movs r4, 0
- movs r0, 0
- strh r0, [r1]
- lsls r0, r7, 5
- adds r0, 0x14
- mov r2, r8
- ldr r1, [r2]
- adds r1, r0
- ldr r2, _081E1858 @ =0x01000010
- mov r0, sp
- bl CpuSet
- mov r0, r8
- ldr r2, [r0]
- ldrb r1, [r2, 0x3]
- adds r0, r6, 0
- ands r0, r1
- strb r0, [r2, 0x3]
- mov r2, r8
- ldr r1, [r2]
- ldrb r0, [r1, 0x7]
- ands r6, r0
- strb r6, [r1, 0x7]
- ldr r0, [r2]
- adds r0, 0xA
- adds r0, r7
- strb r4, [r0]
-_081E1844:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081E1850: .4byte gRfuLinkStatus
-_081E1854: .4byte 0x00ff00ff
-_081E1858: .4byte 0x01000010
- thumb_func_end rfu_STC_removeLinkData
-
- thumb_func_start rfu_REQ_disconnect
-rfu_REQ_disconnect: @ 81E185C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r2, _081E18A0 @ =gRfuLinkStatus
- ldr r1, [r2]
- ldrb r0, [r1, 0x2]
- ldrb r1, [r1, 0x3]
- orrs r0, r1
- ands r0, r4
- cmp r0, 0
- beq _081E18E0
- ldr r0, _081E18A4 @ =gRfuStatic
- ldr r1, [r0]
- strb r4, [r1, 0x5]
- ldr r2, [r2]
- ldrb r1, [r2]
- adds r3, r0, 0
- cmp r1, 0xFF
- bne _081E18A8
- ldr r0, [r3]
- ldrb r1, [r0]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _081E18A8
- ldrb r0, [r2, 0x3]
- ands r0, r4
- cmp r0, 0
- beq _081E18E0
- movs r0, 0x30
- movs r1, 0
- bl rfu_CB_disconnect
- b _081E18E0
- .align 2, 0
-_081E18A0: .4byte gRfuLinkStatus
-_081E18A4: .4byte gRfuStatic
-_081E18A8:
- ldr r0, [r3]
- ldrb r0, [r0, 0x9]
- cmp r0, 0
- beq _081E18D4
- ldr r0, _081E18D0 @ =rfu_CB_defaultCallback
- bl STWI_set_Callback_M
- bl STWI_send_SC_EndREQ
- bl STWI_poll_CommandEnd
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- beq _081E18D4
- movs r0, 0x1B
- bl rfu_STC_REQ_callback
- b _081E18E0
- .align 2, 0
-_081E18D0: .4byte rfu_CB_defaultCallback
-_081E18D4:
- ldr r0, _081E18E8 @ =rfu_CB_disconnect
- bl STWI_set_Callback_M
- adds r0, r4, 0
- bl STWI_send_DisconnectREQ
-_081E18E0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081E18E8: .4byte rfu_CB_disconnect
- thumb_func_end rfu_REQ_disconnect
-
- thumb_func_start rfu_CB_disconnect
-rfu_CB_disconnect: @ 81E18EC
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 16
- lsrs r5, r1, 16
- cmp r5, 0x3
- bne _081E1928
- ldr r0, _081E19BC @ =gRfuLinkStatus
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0
- bne _081E1928
- ldr r0, _081E19C0 @ =rfu_CB_defaultCallback
- bl STWI_set_Callback_M
- bl STWI_send_SystemStatusREQ
- bl STWI_poll_CommandEnd
- lsls r0, 16
- cmp r0, 0
- bne _081E1928
- ldr r0, _081E19C4 @ =gRfuFixed
- ldr r0, [r0]
- adds r0, 0xDC
- ldr r0, [r0]
- ldrb r0, [r0, 0x7]
- cmp r0, 0
- bne _081E1928
- movs r5, 0
-_081E1928:
- ldr r3, _081E19C8 @ =gRfuStatic
- ldr r2, [r3]
- ldr r0, _081E19BC @ =gRfuLinkStatus
- ldr r1, [r0]
- ldrb r0, [r1, 0x2]
- ldrb r1, [r1, 0x3]
- orrs r0, r1
- ldrb r1, [r2, 0x5]
- ands r0, r1
- strb r0, [r2, 0x5]
- ldr r0, _081E19C4 @ =gRfuFixed
- ldr r0, [r0]
- adds r0, 0xDC
- ldr r1, [r0]
- ldr r0, [r3]
- ldrb r0, [r0, 0x5]
- strb r0, [r1, 0x8]
- cmp r5, 0
- bne _081E1976
- movs r4, 0
-_081E1950:
- movs r0, 0x80
- lsls r0, 17
- lsls r0, r4
- lsrs r0, 24
- ldr r1, _081E19C8 @ =gRfuStatic
- ldr r1, [r1]
- ldrb r1, [r1, 0x5]
- ands r0, r1
- cmp r0, 0
- beq _081E196C
- adds r0, r4, 0
- movs r1, 0x1
- bl rfu_STC_removeLinkData
-_081E196C:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _081E1950
-_081E1976:
- ldr r0, _081E19BC @ =gRfuLinkStatus
- ldr r2, [r0]
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- orrs r0, r1
- cmp r0, 0
- bne _081E1988
- movs r0, 0xFF
- strb r0, [r2]
-_081E1988:
- adds r0, r6, 0
- adds r1, r5, 0
- bl rfu_STC_REQ_callback
- ldr r0, _081E19C8 @ =gRfuStatic
- ldr r0, [r0]
- ldrb r0, [r0, 0x9]
- cmp r0, 0
- beq _081E19B6
- ldr r0, _081E19C0 @ =rfu_CB_defaultCallback
- bl STWI_set_Callback_M
- bl STWI_send_SC_StartREQ
- bl STWI_poll_CommandEnd
- adds r5, r0, 0
- cmp r5, 0
- beq _081E19B6
- movs r0, 0x19
- adds r1, r5, 0
- bl rfu_STC_REQ_callback
-_081E19B6:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081E19BC: .4byte gRfuLinkStatus
-_081E19C0: .4byte rfu_CB_defaultCallback
-_081E19C4: .4byte gRfuFixed
-_081E19C8: .4byte gRfuStatic
- thumb_func_end rfu_CB_disconnect
-
- thumb_func_start rfu_REQ_CHILD_startConnectRecovery
-rfu_REQ_CHILD_startConnectRecovery: @ 81E19CC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _081E1A1C @ =gRfuStatic
- ldr r0, [r0]
- strb r5, [r0, 0x5]
- movs r4, 0
- movs r0, 0x1
- ands r0, r5
- ldr r2, _081E1A20 @ =rfu_STC_REQ_callback
- cmp r0, 0
- bne _081E19FA
- movs r1, 0x1
-_081E19E6:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bhi _081E19FA
- adds r0, r5, 0
- asrs r0, r4
- ands r0, r1
- cmp r0, 0
- beq _081E19E6
-_081E19FA:
- adds r0, r2, 0
- bl STWI_set_Callback_M
- ldr r0, _081E1A24 @ =gRfuLinkStatus
- ldr r1, [r0]
- lsls r0, r4, 5
- adds r0, r1, r0
- ldrh r0, [r0, 0x14]
- adds r1, 0x94
- ldrh r1, [r1]
- adds r2, r5, 0
- bl STWI_send_CPR_StartREQ
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081E1A1C: .4byte gRfuStatic
-_081E1A20: .4byte rfu_STC_REQ_callback
-_081E1A24: .4byte gRfuLinkStatus
- thumb_func_end rfu_REQ_CHILD_startConnectRecovery
-
- thumb_func_start rfu_REQ_CHILD_pollConnectRecovery
-rfu_REQ_CHILD_pollConnectRecovery: @ 81E1A28
- push {lr}
- ldr r0, _081E1A38 @ =rfu_CB_CHILD_pollConnectRecovery
- bl STWI_set_Callback_M
- bl STWI_send_CPR_PollingREQ
- pop {r0}
- bx r0
- .align 2, 0
-_081E1A38: .4byte rfu_CB_CHILD_pollConnectRecovery
- thumb_func_end rfu_REQ_CHILD_pollConnectRecovery
-
- thumb_func_start rfu_CB_CHILD_pollConnectRecovery
-rfu_CB_CHILD_pollConnectRecovery: @ 81E1A3C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r1, 16
- lsrs r7, r1, 16
- cmp r7, 0
- bne _081E1AC0
- ldr r0, _081E1AD4 @ =gRfuFixed
- ldr r0, [r0]
- adds r0, 0xDC
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- bne _081E1AC0
- ldr r0, _081E1AD8 @ =gRfuStatic
- ldr r1, [r0]
- ldrb r1, [r1, 0x5]
- adds r6, r0, 0
- cmp r1, 0
- beq _081E1AC0
- ldr r1, _081E1ADC @ =gRfuLinkStatus
- ldr r0, [r1]
- strb r7, [r0]
- movs r4, 0
- adds r5, r1, 0
- mov r12, r4
-_081E1A76:
- movs r0, 0x80
- lsls r0, 17
- lsls r0, r4
- lsrs r3, r0, 24
- ldr r2, [r5]
- ldr r0, [r6]
- ldrb r0, [r0, 0x5]
- ands r0, r3
- ldrb r1, [r2, 0x3]
- ands r0, r1
- cmp r0, 0
- beq _081E1AB0
- ldrb r1, [r2, 0x2]
- adds r0, r3, 0
- orrs r0, r1
- strb r0, [r2, 0x2]
- ldr r1, [r5]
- ldrb r0, [r1, 0x3]
- bics r0, r3
- strb r0, [r1, 0x3]
- ldr r1, [r5]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- ldr r0, [r6]
- adds r0, 0xA
- adds r0, r4
- mov r1, r12
- strb r1, [r0]
-_081E1AB0:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _081E1A76
- ldr r1, [r6]
- movs r0, 0
- strb r0, [r1, 0x5]
-_081E1AC0:
- mov r0, r8
- adds r1, r7, 0
- bl rfu_STC_REQ_callback
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081E1AD4: .4byte gRfuFixed
-_081E1AD8: .4byte gRfuStatic
-_081E1ADC: .4byte gRfuLinkStatus
- thumb_func_end rfu_CB_CHILD_pollConnectRecovery
-
- thumb_func_start rfu_CHILD_getConnectRecoveryStatus
-rfu_CHILD_getConnectRecoveryStatus: @ 81E1AE0
- push {lr}
- adds r2, r0, 0
- movs r0, 0xFF
- strb r0, [r2]
- ldr r0, _081E1B00 @ =gRfuFixed
- ldr r0, [r0]
- adds r0, 0xDC
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x4D
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _081E1B04
- movs r0, 0x10
- b _081E1B0A
- .align 2, 0
-_081E1B00: .4byte gRfuFixed
-_081E1B04:
- ldrb r0, [r1, 0x4]
- strb r0, [r2]
- movs r0, 0
-_081E1B0A:
- pop {r1}
- bx r1
- thumb_func_end rfu_CHILD_getConnectRecoveryStatus
-
- thumb_func_start rfu_REQ_CHILD_endConnectRecovery
-rfu_REQ_CHILD_endConnectRecovery: @ 81E1B10
- push {lr}
- ldr r0, _081E1B20 @ =rfu_CB_CHILD_pollConnectRecovery
- bl STWI_set_Callback_M
- bl STWI_send_CPR_EndREQ
- pop {r0}
- bx r0
- .align 2, 0
-_081E1B20: .4byte rfu_CB_CHILD_pollConnectRecovery
- thumb_func_end rfu_REQ_CHILD_endConnectRecovery
-
- thumb_func_start rfu_STC_fastCopy
-rfu_STC_fastCopy: @ 81E1B24
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- ldr r3, [r5]
- ldr r1, [r6]
- subs r2, 0x1
- movs r0, 0x1
- negs r0, r0
- cmp r2, r0
- beq _081E1B48
- adds r4, r0, 0
-_081E1B3A:
- ldrb r0, [r3]
- strb r0, [r1]
- adds r3, 0x1
- adds r1, 0x1
- subs r2, 0x1
- cmp r2, r4
- bne _081E1B3A
-_081E1B48:
- str r3, [r5]
- str r1, [r6]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end rfu_STC_fastCopy
-
- thumb_func_start rfu_REQ_changeMasterSlave
-rfu_REQ_changeMasterSlave: @ 81E1B54
- push {lr}
- movs r0, 0x1
- bl STWI_read_status
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bne _081E1B74
- ldr r0, _081E1B70 @ =rfu_STC_REQ_callback
- bl STWI_set_Callback_M
- bl STWI_send_MS_ChangeREQ
- b _081E1B7C
- .align 2, 0
-_081E1B70: .4byte rfu_STC_REQ_callback
-_081E1B74:
- movs r0, 0x27
- movs r1, 0
- bl rfu_STC_REQ_callback
-_081E1B7C:
- pop {r0}
- bx r0
- thumb_func_end rfu_REQ_changeMasterSlave
-
- thumb_func_start rfu_getMasterSlave
-rfu_getMasterSlave: @ 81E1B80
- push {lr}
- movs r0, 0x1
- bl STWI_read_status
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x1
- bne _081E1BAE
- ldr r0, _081E1BB4 @ =gRfuState
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0x2C
- ldrb r0, [r0]
- cmp r0, 0
- beq _081E1BAE
- ldrb r0, [r1, 0x6]
- cmp r0, 0x27
- beq _081E1BAC
- cmp r0, 0x25
- beq _081E1BAC
- cmp r0, 0x37
- bne _081E1BAE
-_081E1BAC:
- movs r2, 0
-_081E1BAE:
- adds r0, r2, 0
- pop {r1}
- bx r1
- .align 2, 0
-_081E1BB4: .4byte gRfuState
- thumb_func_end rfu_getMasterSlave
-
- thumb_func_start rfu_clearAllSlot
-rfu_clearAllSlot: @ 81E1BB8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- ldr r1, _081E1C3C @ =0x04000208
- ldrh r0, [r1]
- mov r8, r0
- movs r0, 0
- strh r0, [r1]
- movs r5, 0
- mov r0, sp
- adds r0, 0x2
- movs r7, 0
- adds r6, r0, 0
-_081E1BD4:
- mov r0, sp
- strh r7, [r0]
- ldr r0, _081E1C40 @ =gRfuSlotStatusNI
- lsls r4, r5, 2
- adds r0, r4, r0
- ldr r1, [r0]
- mov r0, sp
- ldr r2, _081E1C44 @ =0x01000034
- bl CpuSet
- strh r7, [r6]
- ldr r0, _081E1C48 @ =gRfuSlotStatusUNI
- adds r4, r0
- ldr r1, [r4]
- adds r0, r6, 0
- ldr r2, _081E1C4C @ =0x0100000a
- bl CpuSet
- ldr r3, _081E1C50 @ =gRfuLinkStatus
- ldr r0, [r3]
- adds r0, 0x10
- adds r0, r5
- movs r1, 0x10
- strb r1, [r0]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x3
- bls _081E1BD4
- ldr r2, [r3]
- movs r1, 0
- movs r0, 0x57
- strb r0, [r2, 0xF]
- ldr r0, [r3]
- strb r1, [r0, 0x4]
- ldr r0, [r3]
- strb r1, [r0, 0x5]
- ldr r0, [r3]
- strb r1, [r0, 0x6]
- ldr r0, _081E1C54 @ =gRfuStatic
- ldr r0, [r0]
- strb r1, [r0, 0x2]
- ldr r0, _081E1C3C @ =0x04000208
- mov r1, r8
- strh r1, [r0]
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081E1C3C: .4byte 0x04000208
-_081E1C40: .4byte gRfuSlotStatusNI
-_081E1C44: .4byte 0x01000034
-_081E1C48: .4byte gRfuSlotStatusUNI
-_081E1C4C: .4byte 0x0100000a
-_081E1C50: .4byte gRfuLinkStatus
-_081E1C54: .4byte gRfuStatic
- thumb_func_end rfu_clearAllSlot
-
- thumb_func_start rfu_STC_releaseFrame
-rfu_STC_releaseFrame: @ 81E1C58
- push {r4-r6,lr}
- adds r4, r2, 0
- lsls r0, 24
- lsrs r2, r0, 24
- adds r5, r2, 0
- lsls r1, 24
- lsrs r3, r1, 24
- ldr r0, _081E1C90 @ =gRfuStatic
- ldr r0, [r0]
- ldrb r1, [r0]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _081E1C98
- ldr r6, _081E1C94 @ =gRfuLinkStatus
- cmp r3, 0
- bne _081E1C84
- ldr r1, [r6]
- ldrb r0, [r1, 0xF]
- ldrh r4, [r4, 0x2E]
- adds r0, r4
- strb r0, [r1, 0xF]
-_081E1C84:
- ldr r1, [r6]
- ldrb r0, [r1, 0xF]
- adds r0, 0x3
- strb r0, [r1, 0xF]
- b _081E1CB8
- .align 2, 0
-_081E1C90: .4byte gRfuStatic
-_081E1C94: .4byte gRfuLinkStatus
-_081E1C98:
- ldr r6, _081E1CC0 @ =gRfuLinkStatus
- cmp r3, 0
- bne _081E1CAC
- ldr r1, [r6]
- adds r1, 0x10
- adds r1, r2
- ldrb r0, [r1]
- ldrh r4, [r4, 0x2E]
- adds r0, r4
- strb r0, [r1]
-_081E1CAC:
- ldr r1, [r6]
- adds r1, 0x10
- adds r1, r5
- ldrb r0, [r1]
- adds r0, 0x2
- strb r0, [r1]
-_081E1CB8:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081E1CC0: .4byte gRfuLinkStatus
- thumb_func_end rfu_STC_releaseFrame
-
- thumb_func_start rfu_clearSlot
-rfu_clearSlot: @ 81E1CC4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r1, 24
- lsrs r7, r1, 24
- cmp r7, 0x3
- bls _081E1CE4
- movs r0, 0x80
- lsls r0, 3
- b _081E1E5C
-_081E1CE4:
- movs r0, 0xF
- mov r1, r8
- ands r0, r1
- cmp r0, 0
- bne _081E1CF4
- movs r0, 0xC0
- lsls r0, 3
- b _081E1E5C
-_081E1CF4:
- ldr r1, _081E1D38 @ =0x04000208
- ldrh r0, [r1]
- mov r10, r0
- movs r0, 0
- strh r0, [r1]
- movs r0, 0xC
- mov r2, r8
- ands r0, r2
- cmp r0, 0
- beq _081E1DBC
- movs r3, 0
- ldr r1, _081E1D3C @ =gRfuSlotStatusNI
- lsls r0, r7, 2
- adds r0, r1
- mov r9, r0
-_081E1D12:
- movs r4, 0
- cmp r3, 0
- bne _081E1D44
- movs r0, 0x4
- mov r1, r8
- ands r0, r1
- cmp r0, 0
- beq _081E1D64
- mov r2, r9
- ldr r4, [r2]
- ldr r0, _081E1D40 @ =gRfuLinkStatus
- ldr r2, [r0]
- adds r0, r4, 0
- adds r0, 0x2C
- ldrb r1, [r0]
- ldrb r0, [r2, 0x4]
- bics r0, r1
- strb r0, [r2, 0x4]
- b _081E1D64
- .align 2, 0
-_081E1D38: .4byte 0x04000208
-_081E1D3C: .4byte gRfuSlotStatusNI
-_081E1D40: .4byte gRfuLinkStatus
-_081E1D44:
- movs r0, 0x8
- mov r1, r8
- ands r0, r1
- cmp r0, 0
- beq _081E1D64
- mov r2, r9
- ldr r0, [r2]
- adds r4, r0, 0
- adds r4, 0x34
- ldr r0, _081E1DF8 @ =gRfuLinkStatus
- ldr r2, [r0]
- movs r1, 0x1
- lsls r1, r7
- ldrb r0, [r2, 0x5]
- bics r0, r1
- strb r0, [r2, 0x5]
-_081E1D64:
- adds r6, r3, 0x1
- cmp r4, 0
- beq _081E1DB4
- ldrh r0, [r4]
- movs r2, 0x80
- lsls r2, 8
- adds r1, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _081E1DA4
- lsls r1, r3, 24
- lsrs r1, 24
- adds r0, r7, 0
- adds r2, r4, 0
- bl rfu_STC_releaseFrame
- movs r1, 0
- adds r2, r4, 0
- adds r2, 0x2C
- movs r5, 0x1
- movs r3, 0
-_081E1D8E:
- ldrb r0, [r2]
- asrs r0, r1
- ands r0, r5
- cmp r0, 0
- beq _081E1D9A
- strh r3, [r4, 0x2]
-_081E1D9A:
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0x3
- bls _081E1D8E
-_081E1DA4:
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- mov r0, sp
- adds r1, r4, 0
- ldr r2, _081E1DFC @ =0x0100001a
- bl CpuSet
-_081E1DB4:
- lsls r0, r6, 16
- lsrs r3, r0, 16
- cmp r3, 0x1
- bls _081E1D12
-_081E1DBC:
- movs r0, 0x1
- mov r4, r8
- ands r0, r4
- cmp r0, 0
- beq _081E1E32
- ldr r1, _081E1E00 @ =gRfuSlotStatusUNI
- lsls r0, r7, 2
- adds r0, r1
- ldr r3, [r0]
- ldrh r1, [r3]
- movs r0, 0x80
- lsls r0, 8
- ands r0, r1
- cmp r0, 0
- beq _081E1E24
- ldr r0, _081E1E04 @ =gRfuStatic
- ldr r0, [r0]
- ldrb r1, [r0]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _081E1E08
- ldr r2, _081E1DF8 @ =gRfuLinkStatus
- ldr r1, [r2]
- ldrb r0, [r1, 0xF]
- adds r0, 0x3
- ldrb r4, [r3, 0x4]
- adds r0, r4
- strb r0, [r1, 0xF]
- b _081E1E1A
- .align 2, 0
-_081E1DF8: .4byte gRfuLinkStatus
-_081E1DFC: .4byte 0x0100001a
-_081E1E00: .4byte gRfuSlotStatusUNI
-_081E1E04: .4byte gRfuStatic
-_081E1E08:
- ldr r2, _081E1E6C @ =gRfuLinkStatus
- ldr r1, [r2]
- adds r1, 0x10
- adds r1, r7
- ldrb r0, [r1]
- adds r0, 0x2
- ldrb r4, [r3, 0x4]
- adds r0, r4
- strb r0, [r1]
-_081E1E1A:
- ldr r2, [r2]
- ldrb r1, [r3, 0x3]
- ldrb r0, [r2, 0x6]
- bics r0, r1
- strb r0, [r2, 0x6]
-_081E1E24:
- mov r0, sp
- movs r1, 0
- strh r1, [r0]
- ldr r2, _081E1E70 @ =0x01000006
- adds r1, r3, 0
- bl CpuSet
-_081E1E32:
- movs r0, 0x2
- mov r1, r8
- ands r0, r1
- cmp r0, 0
- beq _081E1E54
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r1, _081E1E74 @ =gRfuSlotStatusUNI
- lsls r0, r7, 2
- adds r0, r1
- ldr r1, [r0]
- adds r1, 0xC
- ldr r2, _081E1E78 @ =0x01000004
- mov r0, sp
- bl CpuSet
-_081E1E54:
- ldr r0, _081E1E7C @ =0x04000208
- mov r2, r10
- strh r2, [r0]
- movs r0, 0
-_081E1E5C:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_081E1E6C: .4byte gRfuLinkStatus
-_081E1E70: .4byte 0x01000006
-_081E1E74: .4byte gRfuSlotStatusUNI
-_081E1E78: .4byte 0x01000004
-_081E1E7C: .4byte 0x04000208
- thumb_func_end rfu_clearSlot
-
- thumb_func_start rfu_setRecvBuffer
-rfu_setRecvBuffer: @ 81E1E80
- push {r4-r6,lr}
- adds r5, r2, 0
- adds r6, r3, 0
- lsls r0, 24
- lsrs r3, r0, 24
- adds r2, r3, 0
- lsls r1, 24
- lsrs r1, 24
- adds r4, r1, 0
- cmp r1, 0x3
- bls _081E1E9C
- movs r0, 0x80
- lsls r0, 3
- b _081E1ED4
-_081E1E9C:
- movs r0, 0x20
- ands r0, r3
- cmp r0, 0
- beq _081E1EB8
- ldr r0, _081E1EB4 @ =gRfuSlotStatusNI
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- str r5, [r0, 0x68]
- str r6, [r0, 0x6C]
- b _081E1ED2
- .align 2, 0
-_081E1EB4: .4byte gRfuSlotStatusNI
-_081E1EB8:
- movs r0, 0x10
- ands r2, r0
- cmp r2, 0
- bne _081E1EC6
- movs r0, 0xC0
- lsls r0, 3
- b _081E1ED4
-_081E1EC6:
- ldr r0, _081E1EDC @ =gRfuSlotStatusUNI
- lsls r1, r4, 2
- adds r1, r0
- ldr r0, [r1]
- str r5, [r0, 0x14]
- str r6, [r0, 0x18]
-_081E1ED2:
- movs r0, 0
-_081E1ED4:
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_081E1EDC: .4byte gRfuSlotStatusUNI
- thumb_func_end rfu_setRecvBuffer
-
- thumb_func_start rfu_NI_setSendData
-rfu_NI_setSendData: @ 81E1EE0
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- str r3, [sp]
- movs r0, 0x20
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl rfu_STC_setSendData_org
- lsls r0, 16
- lsrs r0, 16
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end rfu_NI_setSendData
-
- thumb_func_start rfu_UNI_setSendData
-rfu_UNI_setSendData: @ 81E1F0C
- push {lr}
- sub sp, 0x4
- adds r3, r1, 0
- lsls r0, 24
- lsrs r1, r0, 24
- lsls r2, 24
- lsrs r2, 24
- ldr r0, _081E1F28 @ =gRfuLinkStatus
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _081E1F2C
- adds r0, r2, 0x3
- b _081E1F2E
- .align 2, 0
-_081E1F28: .4byte gRfuLinkStatus
-_081E1F2C:
- adds r0, r2, 0x2
-_081E1F2E:
- lsls r0, 24
- lsrs r2, r0, 24
- movs r0, 0
- str r0, [sp]
- movs r0, 0x10
- bl rfu_STC_setSendData_org
- lsls r0, 16
- lsrs r0, 16
- add sp, 0x4
- pop {r1}
- bx r1
- thumb_func_end rfu_UNI_setSendData
-
- thumb_func_start rfu_NI_CHILD_setSendGameName
-rfu_NI_CHILD_setSendGameName: @ 81E1F48
- push {lr}
- sub sp, 0x4
- adds r2, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r2, 24
- lsrs r2, 24
- movs r1, 0x80
- lsls r1, 17
- lsls r1, r0
- lsrs r1, 24
- ldr r0, _081E1F78 @ =gRfuLinkStatus
- ldr r3, [r0]
- adds r3, 0x98
- movs r0, 0x1A
- str r0, [sp]
- movs r0, 0x40
- bl rfu_STC_setSendData_org
- lsls r0, 16
- lsrs r0, 16
- add sp, 0x4
- pop {r1}
- bx r1
- .align 2, 0
-_081E1F78: .4byte gRfuLinkStatus
- thumb_func_end rfu_NI_CHILD_setSendGameName
-
- thumb_func_start rfu_STC_setSendData_org
-rfu_STC_setSendData_org: @ 81E1F7C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- str r3, [sp]
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r3, r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- ldr r0, _081E1FA8 @ =gRfuLinkStatus
- ldr r2, [r0]
- ldrb r1, [r2]
- mov r10, r0
- cmp r1, 0xFF
- bne _081E1FB0
- ldr r0, _081E1FAC @ =0x00000301
- b _081E2166
- .align 2, 0
-_081E1FA8: .4byte gRfuLinkStatus
-_081E1FAC: .4byte 0x00000301
-_081E1FB0:
- movs r0, 0xF
- ands r0, r3
- cmp r0, 0
- bne _081E1FBE
- movs r0, 0x80
- lsls r0, 3
- b _081E2166
-_081E1FBE:
- ldrb r0, [r2, 0x2]
- ldrb r1, [r2, 0x3]
- orrs r0, r1
- ands r0, r3
- cmp r0, r3
- beq _081E1FD4
- ldr r0, _081E1FD0 @ =0x00000401
- b _081E2166
- .align 2, 0
-_081E1FD0: .4byte 0x00000401
-_081E1FD4:
- movs r0, 0x10
- ands r0, r6
- cmp r0, 0
- beq _081E1FE0
- ldrb r0, [r2, 0x6]
- b _081E1FE2
-_081E1FE0:
- ldrb r0, [r2, 0x4]
-_081E1FE2:
- ands r0, r3
- cmp r0, 0
- beq _081E1FF0
- ldr r0, _081E1FEC @ =0x00000402
- b _081E2166
- .align 2, 0
-_081E1FEC: .4byte 0x00000402
-_081E1FF0:
- movs r2, 0
- movs r0, 0x1
- ands r0, r3
- ldr r4, _081E2020 @ =_Str_RfuHeader
- cmp r0, 0
- bne _081E2012
- movs r1, 0x1
-_081E1FFE:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bhi _081E2012
- adds r0, r3, 0
- asrs r0, r2
- ands r0, r1
- cmp r0, 0
- beq _081E1FFE
-_081E2012:
- mov r0, r10
- ldr r1, [r0]
- ldrb r0, [r1]
- cmp r0, 0x1
- bne _081E2024
- adds r1, 0xF
- b _081E202E
- .align 2, 0
-_081E2020: .4byte _Str_RfuHeader
-_081E2024:
- cmp r0, 0
- bne _081E2030
- adds r0, r2, 0
- adds r0, 0x10
- adds r1, r0
-_081E202E:
- mov r9, r1
-_081E2030:
- mov r1, r10
- ldr r0, [r1]
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r4
- ldrb r4, [r0]
- mov r0, r9
- ldrb r0, [r0]
- cmp r8, r0
- bhi _081E2048
- cmp r8, r4
- bhi _081E204E
-_081E2048:
- movs r0, 0xA0
- lsls r0, 3
- b _081E2166
-_081E204E:
- ldr r1, _081E209C @ =0x04000208
- ldrh r0, [r1]
- str r0, [sp, 0x4]
- movs r7, 0
- strh r7, [r1]
- movs r0, 0x20
- ands r0, r6
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _081E2068
- cmp r6, 0x40
- bne _081E2124
-_081E2068:
- ldr r1, _081E20A0 @ =gRfuSlotStatusNI
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- mov r12, r0
- movs r1, 0
- strh r1, [r0, 0x18]
- mov r1, r12
- adds r1, 0x2D
- mov r2, r12
- str r1, [r2, 0x4]
- movs r0, 0x7
- str r0, [r2, 0x14]
- mov r0, r12
- adds r0, 0x2C
- strb r3, [r0]
- strb r3, [r2, 0x1A]
- mov r2, r8
- subs r0, r2, r4
- mov r2, r12
- strh r0, [r2, 0x2E]
- cmp r5, 0
- beq _081E20A4
- strb r7, [r1]
- b _081E20A8
- .align 2, 0
-_081E209C: .4byte 0x04000208
-_081E20A0: .4byte gRfuSlotStatusNI
-_081E20A4:
- movs r0, 0x1
- strb r0, [r1]
-_081E20A8:
- ldr r0, [sp, 0x28]
- mov r1, r12
- str r0, [r1, 0x30]
- ldr r2, [sp]
- str r2, [r1, 0x28]
- movs r1, 0
- mov r0, r12
- strb r1, [r0, 0x1F]
- adds r0, 0x20
- strb r1, [r0]
- mov r4, r12
- adds r4, 0x1B
- movs r6, 0
- mov r2, r12
- adds r2, 0x21
- movs r5, 0x1
-_081E20C8:
- adds r0, r4, r1
- strb r6, [r0]
- adds r0, r2, r1
- strb r5, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x3
- bls _081E20C8
- movs r2, 0
- movs r5, 0x1
- ldr r4, _081E211C @ =gRfuSlotStatusNI
- movs r1, 0
-_081E20E2:
- adds r0, r3, 0
- asrs r0, r2
- ands r0, r5
- cmp r0, 0
- beq _081E20F4
- lsls r0, r2, 2
- adds r0, r4
- ldr r0, [r0]
- strh r1, [r0, 0x2]
-_081E20F4:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _081E20E2
- mov r1, r10
- ldr r2, [r1]
- ldrb r1, [r2, 0x4]
- adds r0, r3, 0
- orrs r0, r1
- strb r0, [r2, 0x4]
- mov r2, r9
- ldrb r0, [r2]
- mov r1, r8
- subs r0, r1
- strb r0, [r2]
- ldr r0, _081E2120 @ =0x00008021
- mov r2, r12
- strh r0, [r2]
- b _081E215C
- .align 2, 0
-_081E211C: .4byte gRfuSlotStatusNI
-_081E2120: .4byte 0x00008021
-_081E2124:
- movs r0, 0x10
- ands r0, r6
- cmp r0, 0
- beq _081E215C
- ldr r1, _081E2178 @ =gRfuSlotStatusUNI
- lsls r0, r2, 2
- adds r0, r1
- ldr r1, [r0]
- strb r3, [r1, 0x3]
- ldr r0, [sp]
- str r0, [r1, 0x8]
- mov r2, r8
- subs r0, r2, r4
- strh r0, [r1, 0x4]
- mov r2, r9
- ldrb r0, [r2]
- mov r2, r8
- subs r0, r2
- mov r2, r9
- strb r0, [r2]
- ldr r0, _081E217C @ =0x00008024
- strh r0, [r1]
- mov r0, r10
- ldr r2, [r0]
- ldrb r1, [r2, 0x6]
- adds r0, r3, 0
- orrs r0, r1
- strb r0, [r2, 0x6]
-_081E215C:
- ldr r0, _081E2180 @ =0x04000208
- mov r1, sp
- ldrh r1, [r1, 0x4]
- strh r1, [r0]
- movs r0, 0
-_081E2166:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_081E2178: .4byte gRfuSlotStatusUNI
-_081E217C: .4byte 0x00008024
-_081E2180: .4byte 0x04000208
- thumb_func_end rfu_STC_setSendData_org
-
- thumb_func_start rfu_changeSendTarget
-rfu_changeSendTarget: @ 81E2184
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- adds r3, r0, 0
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 24
- lsrs r6, r2, 24
- cmp r7, 0x3
- bls _081E21A8
- movs r0, 0x80
- lsls r0, 3
- b _081E22DC
-_081E21A8:
- cmp r0, 0x20
- bne _081E2248
- ldr r0, _081E2238 @ =gRfuSlotStatusNI
- mov r12, r0
- lsls r0, r7, 2
- add r0, r12
- ldr r5, [r0]
- ldrh r2, [r5]
- ldr r1, _081E223C @ =0x00008020
- adds r0, r1, 0
- ands r0, r2
- cmp r0, r1
- bne _081E225E
- ldrb r0, [r5, 0x1A]
- adds r3, r6, 0
- eors r3, r0
- adds r2, r3, 0
- ands r2, r6
- cmp r2, 0
- bne _081E2296
- cmp r3, 0
- bne _081E21D6
- b _081E22DA
-_081E21D6:
- ldr r1, _081E2240 @ =0x04000208
- ldrh r0, [r1]
- mov r8, r0
- strh r2, [r1]
- movs r2, 0
- mvns r1, r3
- str r1, [sp]
- lsls r4, r6, 24
- mov r10, r4
- movs r0, 0x1
- mov r9, r0
- movs r1, 0
-_081E21EE:
- adds r0, r3, 0
- asrs r0, r2
- mov r4, r9
- ands r0, r4
- cmp r0, 0
- beq _081E2202
- lsls r0, r2, 2
- add r0, r12
- ldr r0, [r0]
- strh r1, [r0, 0x2]
-_081E2202:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _081E21EE
- ldr r0, _081E2244 @ =gRfuLinkStatus
- ldr r1, [r0]
- ldrb r0, [r1, 0x4]
- ldr r2, [sp]
- ands r2, r0
- strb r2, [r1, 0x4]
- strb r6, [r5, 0x1A]
- mov r0, r10
- cmp r0, 0
- bne _081E222E
- adds r0, r7, 0
- movs r1, 0
- adds r2, r5, 0
- bl rfu_STC_releaseFrame
- movs r0, 0x27
- strh r0, [r5]
-_081E222E:
- ldr r0, _081E2240 @ =0x04000208
- mov r1, r8
- strh r1, [r0]
- b _081E22DA
- .align 2, 0
-_081E2238: .4byte gRfuSlotStatusNI
-_081E223C: .4byte 0x00008020
-_081E2240: .4byte 0x04000208
-_081E2244: .4byte gRfuLinkStatus
-_081E2248:
- cmp r3, 0x10
- bne _081E22D4
- ldr r3, _081E2264 @ =gRfuSlotStatusUNI
- lsls r1, r7, 2
- adds r0, r1, r3
- ldr r0, [r0]
- ldrh r2, [r0]
- ldr r0, _081E2268 @ =0x00008024
- adds r5, r3, 0
- cmp r2, r0
- beq _081E2270
-_081E225E:
- ldr r0, _081E226C @ =0x00000403
- b _081E22DC
- .align 2, 0
-_081E2264: .4byte gRfuSlotStatusUNI
-_081E2268: .4byte 0x00008024
-_081E226C: .4byte 0x00000403
-_081E2270:
- movs r3, 0
- movs r2, 0
- adds r4, r5, 0
-_081E2276:
- cmp r2, r7
- beq _081E2284
- lsls r0, r2, 2
- adds r0, r4
- ldr r0, [r0]
- ldrb r0, [r0, 0x3]
- orrs r3, r0
-_081E2284:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _081E2276
- adds r2, r6, 0
- ands r2, r3
- cmp r2, 0
- beq _081E22A0
-_081E2296:
- ldr r0, _081E229C @ =0x00000404
- b _081E22DC
- .align 2, 0
-_081E229C: .4byte 0x00000404
-_081E22A0:
- ldr r3, _081E22CC @ =0x04000208
- ldrh r0, [r3]
- mov r8, r0
- strh r2, [r3]
- ldr r4, _081E22D0 @ =gRfuLinkStatus
- ldr r2, [r4]
- adds r5, r1, r5
- ldr r0, [r5]
- ldrb r1, [r0, 0x3]
- ldrb r0, [r2, 0x6]
- bics r0, r1
- strb r0, [r2, 0x6]
- ldr r2, [r4]
- ldrb r1, [r2, 0x6]
- adds r0, r6, 0
- orrs r0, r1
- strb r0, [r2, 0x6]
- ldr r0, [r5]
- strb r6, [r0, 0x3]
- mov r2, r8
- strh r2, [r3]
- b _081E22DA
- .align 2, 0
-_081E22CC: .4byte 0x04000208
-_081E22D0: .4byte gRfuLinkStatus
-_081E22D4:
- movs r0, 0xC0
- lsls r0, 3
- b _081E22DC
-_081E22DA:
- movs r0, 0
-_081E22DC:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end rfu_changeSendTarget
-
- thumb_func_start rfu_NI_stopReceivingData
-rfu_NI_stopReceivingData: @ 81E22EC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bls _081E22FC
- movs r0, 0x80
- lsls r0, 3
- b _081E2356
-_081E22FC:
- ldr r1, _081E2328 @ =gRfuSlotStatusNI
- lsls r0, r3, 2
- adds r0, r1
- ldr r2, [r0]
- adds r5, r2, 0
- adds r5, 0x34
- ldr r1, _081E232C @ =0x04000208
- ldrh r0, [r1]
- adds r4, r0, 0
- movs r0, 0
- strh r0, [r1]
- ldrh r1, [r2, 0x34]
- movs r0, 0x80
- lsls r0, 8
- ands r0, r1
- cmp r0, 0
- beq _081E2350
- ldr r0, _081E2330 @ =0x00008043
- cmp r1, r0
- bne _081E2334
- movs r0, 0x48
- b _081E2336
- .align 2, 0
-_081E2328: .4byte gRfuSlotStatusNI
-_081E232C: .4byte 0x04000208
-_081E2330: .4byte 0x00008043
-_081E2334:
- movs r0, 0x47
-_081E2336:
- strh r0, [r2, 0x34]
- ldr r0, _081E235C @ =gRfuLinkStatus
- ldr r2, [r0]
- movs r1, 0x1
- lsls r1, r3
- ldrb r0, [r2, 0x5]
- bics r0, r1
- strb r0, [r2, 0x5]
- adds r0, r3, 0
- movs r1, 0x1
- adds r2, r5, 0
- bl rfu_STC_releaseFrame
-_081E2350:
- ldr r0, _081E2360 @ =0x04000208
- strh r4, [r0]
- movs r0, 0
-_081E2356:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_081E235C: .4byte gRfuLinkStatus
-_081E2360: .4byte 0x04000208
- thumb_func_end rfu_NI_stopReceivingData
-
- thumb_func_start rfu_UNI_changeAndReadySendData
-rfu_UNI_changeAndReadySendData: @ 81E2364
- push {r4-r7,lr}
- adds r7, r1, 0
- lsls r0, 24
- lsrs r0, 24
- adds r3, r0, 0
- lsls r2, 24
- lsrs r5, r2, 24
- cmp r0, 0x3
- bls _081E237C
- movs r0, 0x80
- lsls r0, 3
- b _081E23F0
-_081E237C:
- ldr r1, _081E2390 @ =gRfuSlotStatusUNI
- lsls r0, 2
- adds r0, r1
- ldr r4, [r0]
- ldrh r1, [r4]
- ldr r0, _081E2394 @ =0x00008024
- cmp r1, r0
- beq _081E239C
- ldr r0, _081E2398 @ =0x00000403
- b _081E23F0
- .align 2, 0
-_081E2390: .4byte gRfuSlotStatusUNI
-_081E2394: .4byte 0x00008024
-_081E2398: .4byte 0x00000403
-_081E239C:
- ldr r0, _081E23B0 @ =gRfuLinkStatus
- ldr r1, [r0]
- ldrb r0, [r1]
- cmp r0, 0x1
- bne _081E23B4
- adds r6, r1, 0
- adds r6, 0xF
- ldrb r0, [r4, 0x4]
- ldrb r1, [r1, 0xF]
- b _081E23C2
- .align 2, 0
-_081E23B0: .4byte gRfuLinkStatus
-_081E23B4:
- adds r0, r3, 0
- adds r0, 0x10
- adds r6, r1, r0
- adds r1, 0x10
- adds r1, r3
- ldrb r0, [r4, 0x4]
- ldrb r1, [r1]
-_081E23C2:
- adds r0, r1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, r5
- bcc _081E23EC
- ldr r2, _081E23E8 @ =0x04000208
- ldrh r1, [r2]
- movs r0, 0
- strh r0, [r2]
- str r7, [r4, 0x8]
- subs r0, r3, r5
- strb r0, [r6]
- strh r5, [r4, 0x4]
- movs r0, 0x1
- strb r0, [r4, 0x2]
- strh r1, [r2]
- movs r0, 0
- b _081E23F0
- .align 2, 0
-_081E23E8: .4byte 0x04000208
-_081E23EC:
- movs r0, 0xA0
- lsls r0, 3
-_081E23F0:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end rfu_UNI_changeAndReadySendData
-
- thumb_func_start rfu_UNI_readySendData
-rfu_UNI_readySendData: @ 81E23F8
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bhi _081E2416
- ldr r1, _081E241C @ =gRfuSlotStatusUNI
- lsls r0, 2
- adds r0, r1
- ldr r2, [r0]
- ldrh r1, [r2]
- ldr r0, _081E2420 @ =0x00008024
- cmp r1, r0
- bne _081E2416
- movs r0, 0x1
- strb r0, [r2, 0x2]
-_081E2416:
- pop {r0}
- bx r0
- .align 2, 0
-_081E241C: .4byte gRfuSlotStatusUNI
-_081E2420: .4byte 0x00008024
- thumb_func_end rfu_UNI_readySendData
-
- thumb_func_start rfu_UNI_clearRecvNewDataFlag
-rfu_UNI_clearRecvNewDataFlag: @ 81E2424
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bhi _081E243A
- ldr r1, _081E2440 @ =gRfuSlotStatusUNI
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- movs r0, 0
- strb r0, [r1, 0x12]
-_081E243A:
- pop {r0}
- bx r0
- .align 2, 0
-_081E2440: .4byte gRfuSlotStatusUNI
- thumb_func_end rfu_UNI_clearRecvNewDataFlag
-
- thumb_func_start rfu_REQ_sendData
-rfu_REQ_sendData: @ 81E2444
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _081E2490 @ =gRfuLinkStatus
- ldr r2, [r0]
- ldrb r1, [r2]
- adds r4, r0, 0
- cmp r1, 0xFF
- bne _081E2458
- b _081E257E
-_081E2458:
- cmp r1, 0x1
- bne _081E24E8
- ldrb r0, [r2, 0x4]
- ldrb r1, [r2, 0x5]
- adds r3, r0, 0
- orrs r3, r1
- ldrb r0, [r2, 0x6]
- orrs r3, r0
- cmp r3, 0
- bne _081E24E8
- ldr r0, _081E2494 @ =gRfuStatic
- ldr r2, [r0]
- ldrb r1, [r2, 0x3]
- adds r4, r0, 0
- cmp r1, 0
- beq _081E2480
- movs r0, 0x10
- strb r0, [r2, 0x8]
- ldr r0, [r4]
- strb r3, [r0, 0x7]
-_081E2480:
- ldr r1, [r4]
- ldrb r0, [r1, 0x8]
- cmp r0, 0
- beq _081E2498
- subs r0, 0x1
- strb r0, [r1, 0x8]
- b _081E249E
- .align 2, 0
-_081E2490: .4byte gRfuLinkStatus
-_081E2494: .4byte gRfuStatic
-_081E2498:
- ldrb r0, [r1, 0x7]
- adds r0, 0x1
- strb r0, [r1, 0x7]
-_081E249E:
- ldr r1, [r4]
- ldrb r0, [r1, 0x8]
- cmp r0, 0
- bne _081E24B0
- ldrb r1, [r1, 0x7]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0
- bne _081E2542
-_081E24B0:
- ldr r4, _081E24D4 @ =gRfuFixed
- ldr r1, [r4]
- movs r0, 0x1
- str r0, [r1, 0x68]
- movs r0, 0xFF
- str r0, [r1, 0x78]
- ldr r0, _081E24D8 @ =rfu_CB_sendData3
- bl STWI_set_Callback_M
- cmp r5, 0
- bne _081E24DC
- ldr r0, [r4]
- adds r0, 0x68
- movs r1, 0x1
- bl STWI_send_DataTxREQ
- b _081E257E
- .align 2, 0
-_081E24D4: .4byte gRfuFixed
-_081E24D8: .4byte rfu_CB_sendData3
-_081E24DC:
- ldr r0, [r4]
- adds r0, 0x68
- movs r1, 0x1
- bl STWI_send_DataTxAndChangeREQ
- b _081E257E
-_081E24E8:
- ldr r0, [r4]
- ldrb r0, [r0, 0xE]
- cmp r0, 0
- bne _081E24F4
- bl rfu_constructSendLLFrame
-_081E24F4:
- ldr r0, [r4]
- ldrb r0, [r0, 0xE]
- cmp r0, 0
- beq _081E2542
- ldr r0, _081E2520 @ =rfu_CB_sendData
- bl STWI_set_Callback_M
- cmp r5, 0
- beq _081E252C
- ldr r0, _081E2524 @ =gRfuFixed
- ldr r0, [r0]
- adds r0, 0x68
- ldr r1, _081E2528 @ =gRfuStatic
- ldr r1, [r1]
- ldr r1, [r1, 0x24]
- adds r1, 0x4
- lsls r1, 24
- lsrs r1, 24
- bl STWI_send_DataTxAndChangeREQ
- b _081E257E
- .align 2, 0
-_081E2520: .4byte rfu_CB_sendData
-_081E2524: .4byte gRfuFixed
-_081E2528: .4byte gRfuStatic
-_081E252C:
- ldr r0, _081E2564 @ =gRfuFixed
- ldr r0, [r0]
- adds r0, 0x68
- ldr r1, _081E2568 @ =gRfuStatic
- ldr r1, [r1]
- ldr r1, [r1, 0x24]
- adds r1, 0x4
- lsls r1, 24
- lsrs r1, 24
- bl STWI_send_DataTxREQ
-_081E2542:
- cmp r5, 0
- beq _081E257E
- ldr r0, _081E256C @ =gRfuLinkStatus
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _081E2574
- ldr r0, _081E2570 @ =gRfuState
- ldr r0, [r0]
- ldr r1, [r0, 0x1C]
- cmp r1, 0
- beq _081E257E
- movs r0, 0x27
- bl _call_via_r1
- b _081E257E
- .align 2, 0
-_081E2564: .4byte gRfuFixed
-_081E2568: .4byte gRfuStatic
-_081E256C: .4byte gRfuLinkStatus
-_081E2570: .4byte gRfuState
-_081E2574:
- ldr r0, _081E2584 @ =rfu_CB_sendData2
- bl STWI_set_Callback_M
- bl STWI_send_MS_ChangeREQ
-_081E257E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081E2584: .4byte rfu_CB_sendData2
- thumb_func_end rfu_REQ_sendData
-
- thumb_func_start rfu_CB_sendData
-rfu_CB_sendData: @ 81E2588
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r1, 16
- lsrs r7, r1, 16
- cmp r7, 0
- bne _081E25F2
- movs r6, 0
- ldr r0, _081E2610 @ =0x00008020
- mov r8, r0
-_081E259C:
- ldr r0, _081E2614 @ =gRfuSlotStatusUNI
- lsls r2, r6, 2
- adds r0, r2, r0
- ldr r1, [r0]
- ldrb r0, [r1, 0x2]
- cmp r0, 0
- beq _081E25AE
- movs r0, 0
- strb r0, [r1, 0x2]
-_081E25AE:
- ldr r0, _081E2618 @ =gRfuSlotStatusNI
- adds r0, r2, r0
- ldr r4, [r0]
- ldrh r0, [r4]
- cmp r0, r8
- bne _081E25E8
- adds r0, r6, 0
- movs r1, 0
- adds r2, r4, 0
- bl rfu_STC_releaseFrame
- ldr r5, _081E261C @ =gRfuLinkStatus
- ldr r2, [r5]
- ldrb r1, [r4, 0x1A]
- ldrb r0, [r2, 0x4]
- bics r0, r1
- strb r0, [r2, 0x4]
- adds r0, r4, 0
- adds r0, 0x2D
- ldrb r3, [r0]
- cmp r3, 0x1
- bne _081E25E4
- ldr r1, [r5]
- lsls r3, r6
- ldrb r0, [r1, 0x7]
- orrs r3, r0
- strb r3, [r1, 0x7]
-_081E25E4:
- movs r0, 0x26
- strh r0, [r4]
-_081E25E8:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x3
- bls _081E259C
-_081E25F2:
- ldr r0, _081E261C @ =gRfuLinkStatus
- ldr r1, [r0]
- ldrb r0, [r1, 0xE]
- movs r0, 0
- strb r0, [r1, 0xE]
- movs r0, 0x24
- adds r1, r7, 0
- bl rfu_STC_REQ_callback
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081E2610: .4byte 0x00008020
-_081E2614: .4byte gRfuSlotStatusUNI
-_081E2618: .4byte gRfuSlotStatusNI
-_081E261C: .4byte gRfuLinkStatus
- thumb_func_end rfu_CB_sendData
-
- thumb_func_start rfu_CB_sendData2
-rfu_CB_sendData2: @ 81E2620
- push {lr}
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x24
- bl rfu_STC_REQ_callback
- pop {r0}
- bx r0
- thumb_func_end rfu_CB_sendData2
-
- thumb_func_start rfu_CB_sendData3
-rfu_CB_sendData3: @ 81E2630
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r1, 16
- cmp r1, 0
- beq _081E2646
- movs r0, 0x24
- bl rfu_STC_REQ_callback
- b _081E2652
-_081E2646:
- cmp r0, 0xFF
- bne _081E2652
- movs r0, 0xFF
- movs r1, 0
- bl rfu_STC_REQ_callback
-_081E2652:
- pop {r0}
- bx r0
- thumb_func_end rfu_CB_sendData3
-
- thumb_func_start rfu_constructSendLLFrame
-rfu_constructSendLLFrame: @ 81E2658
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r0, _081E2704 @ =gRfuLinkStatus
- ldr r2, [r0]
- ldrb r0, [r2]
- cmp r0, 0xFF
- bne _081E2670
- b _081E2774
-_081E2670:
- ldrb r0, [r2, 0x4]
- ldrb r1, [r2, 0x5]
- orrs r0, r1
- ldrb r1, [r2, 0x6]
- orrs r0, r1
- cmp r0, 0
- beq _081E2774
- ldrb r0, [r2, 0xE]
- movs r0, 0
- strb r0, [r2, 0xE]
- mov r8, r0
- ldr r0, _081E2708 @ =gRfuFixed
- ldr r0, [r0]
- adds r0, 0x6C
- str r0, [sp]
- movs r6, 0
- movs r0, 0x80
- lsls r0, 8
- mov r9, r0
- ldr r1, _081E270C @ =0x00008024
- mov r10, r1
-_081E269A:
- movs r5, 0
- ldr r0, _081E2710 @ =gRfuSlotStatusNI
- lsls r7, r6, 2
- adds r4, r7, r0
- ldr r2, [r4]
- ldrh r1, [r2]
- mov r0, r9
- ands r0, r1
- cmp r0, 0
- beq _081E26BA
- adds r0, r6, 0
- mov r1, sp
- bl rfu_STC_NI_constructLLSF
- lsls r0, 16
- lsrs r5, r0, 16
-_081E26BA:
- ldr r2, [r4]
- ldrh r1, [r2, 0x34]
- mov r0, r9
- ands r0, r1
- cmp r0, 0
- beq _081E26D6
- adds r2, 0x34
- adds r0, r6, 0
- mov r1, sp
- bl rfu_STC_NI_constructLLSF
- lsls r0, 16
- lsrs r0, 16
- adds r5, r0
-_081E26D6:
- ldr r0, _081E2714 @ =gRfuSlotStatusUNI
- adds r0, r7, r0
- ldr r0, [r0]
- ldrh r0, [r0]
- cmp r0, r10
- bne _081E26F0
- adds r0, r6, 0
- mov r1, sp
- bl rfu_STC_UNI_constructLLSF
- lsls r0, 16
- lsrs r0, 16
- adds r5, r0
-_081E26F0:
- cmp r5, 0
- beq _081E2724
- ldr r0, _081E2704 @ =gRfuLinkStatus
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _081E2718
- add r8, r5
- b _081E2724
- .align 2, 0
-_081E2704: .4byte gRfuLinkStatus
-_081E2708: .4byte gRfuFixed
-_081E270C: .4byte 0x00008024
-_081E2710: .4byte gRfuSlotStatusNI
-_081E2714: .4byte gRfuSlotStatusUNI
-_081E2718:
- adds r0, r7, r6
- adds r0, 0x8
- lsls r5, r0
- mov r2, r8
- orrs r2, r5
- mov r8, r2
-_081E2724:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x3
- bls _081E269A
- ldr r6, _081E2784 @ =gRfuStatic
- mov r0, r8
- cmp r0, 0
- beq _081E276E
- ldr r2, [sp]
- movs r0, 0x3
- ands r0, r2
- ldr r5, _081E2788 @ =gRfuLinkStatus
- ldr r1, _081E278C @ =gRfuFixed
- cmp r0, 0
- beq _081E2756
- movs r4, 0
- movs r3, 0x3
-_081E2748:
- strb r4, [r2]
- adds r0, r2, 0x1
- str r0, [sp]
- adds r2, r0, 0
- ands r0, r3
- cmp r0, 0
- bne _081E2748
-_081E2756:
- ldr r0, [r1]
- mov r2, r8
- str r2, [r0, 0x68]
- ldr r0, [r5]
- ldrb r0, [r0]
- cmp r0, 0
- bne _081E276E
- ldr r0, [sp]
- subs r0, 0x6C
- ldr r1, [r1]
- subs r0, r1
- mov r8, r0
-_081E276E:
- ldr r0, [r6]
- mov r1, r8
- str r1, [r0, 0x24]
-_081E2774:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081E2784: .4byte gRfuStatic
-_081E2788: .4byte gRfuLinkStatus
-_081E278C: .4byte gRfuFixed
- thumb_func_end rfu_constructSendLLFrame
-
- thumb_func_start rfu_STC_NI_constructLLSF
-rfu_STC_NI_constructLLSF: @ 81E2790
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r12, r1
- adds r4, r2, 0
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r2, _081E280C @ =gRfuLinkStatus
- ldr r0, [r2]
- ldrb r0, [r0]
- lsls r0, 4
- ldr r1, _081E2810 @ =_Str_RfuHeader
- adds r0, r1
- mov r8, r0
- ldrh r1, [r4]
- ldr r0, _081E2814 @ =0x00008022
- cmp r1, r0
- bne _081E27FA
- adds r3, r4, 0
- adds r3, 0x20
- ldrb r1, [r3]
- lsls r1, 2
- adds r5, r4, 0x4
- adds r1, r5, r1
- ldr r2, [r4, 0x28]
- ldr r0, [r4, 0x30]
- adds r2, r0
- ldr r0, [r1]
- adds r6, r3, 0
- cmp r0, r2
- bcc _081E27FA
- movs r7, 0
-_081E27D8:
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bne _081E27E8
- strb r7, [r6]
-_081E27E8:
- ldrb r1, [r3]
- lsls r1, 2
- adds r1, r5, r1
- ldr r2, [r4, 0x28]
- ldr r0, [r4, 0x30]
- adds r2, r0
- ldr r0, [r1]
- cmp r0, r2
- bcs _081E27D8
-_081E27FA:
- ldrh r1, [r4]
- movs r0, 0x40
- ands r0, r1
- mov r9, r1
- cmp r0, 0
- beq _081E2818
- movs r5, 0
- b _081E285C
- .align 2, 0
-_081E280C: .4byte gRfuLinkStatus
-_081E2810: .4byte _Str_RfuHeader
-_081E2814: .4byte 0x00008022
-_081E2818:
- ldr r0, _081E2844 @ =0x00008022
- cmp r9, r0
- bne _081E284C
- adds r3, r4, 0
- adds r3, 0x20
- ldrb r0, [r3]
- lsls r0, 2
- adds r1, r4, 0x4
- adds r1, r0
- ldrh r7, [r4, 0x2E]
- ldr r5, [r1]
- adds r2, r5, r7
- ldr r1, [r4, 0x28]
- ldr r0, [r4, 0x30]
- adds r0, r1, r0
- adds r6, r3, 0
- cmp r2, r0
- bls _081E2848
- subs r0, r5
- lsls r0, 16
- lsrs r5, r0, 16
- b _081E2860
- .align 2, 0
-_081E2844: .4byte 0x00008022
-_081E2848:
- adds r5, r7, 0
- b _081E2860
-_081E284C:
- ldrh r2, [r4, 0x2E]
- ldr r0, [r4, 0x14]
- cmp r0, r2
- bcc _081E2858
- adds r5, r2, 0
- b _081E285C
-_081E2858:
- lsls r0, 16
- lsrs r5, r0, 16
-_081E285C:
- adds r6, r4, 0
- adds r6, 0x20
-_081E2860:
- movs r3, 0xF
- mov r0, r9
- ands r3, r0
- mov r1, r8
- ldrb r1, [r1, 0x3]
- lsls r3, r1
- ldrb r0, [r4, 0x1F]
- mov r2, r8
- ldrb r2, [r2, 0x4]
- lsls r0, r2
- orrs r3, r0
- ldrb r1, [r6]
- adds r0, r1, 0
- mov r7, r8
- ldrb r7, [r7, 0x5]
- lsls r0, r7
- orrs r3, r0
- adds r0, r4, 0
- adds r0, 0x21
- adds r0, r1
- ldrb r0, [r0]
- mov r1, r8
- ldrb r1, [r1, 0x6]
- lsls r0, r1
- orrs r3, r0
- orrs r3, r5
- str r3, [sp]
- ldr r2, _081E291C @ =gRfuLinkStatus
- ldr r0, [r2]
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _081E28A8
- ldrb r0, [r4, 0x1A]
- lsls r0, 18
- orrs r3, r0
- str r3, [sp]
-_081E28A8:
- mov r2, sp
- movs r3, 0
- mov r7, r8
- ldrb r7, [r7]
- cmp r3, r7
- bcs _081E28D2
-_081E28B4:
- mov r0, r12
- ldr r1, [r0]
- ldrb r0, [r2]
- strb r0, [r1]
- adds r2, 0x1
- adds r1, 0x1
- mov r7, r12
- str r1, [r7]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- mov r0, r8
- ldrb r0, [r0]
- cmp r3, r0
- bcc _081E28B4
-_081E28D2:
- cmp r5, 0
- beq _081E28F2
- ldrb r1, [r6]
- lsls r1, 2
- adds r0, r4, 0x4
- adds r0, r1
- ldr r0, [r0]
- str r0, [sp, 0x4]
- ldr r0, _081E2920 @ =gRfuFixed
- ldr r1, [r0]
- add r0, sp, 0x4
- ldr r3, [r1, 0x4]
- mov r1, r12
- adds r2, r5, 0
- bl _call_via_r3
-_081E28F2:
- ldrh r1, [r4]
- ldr r0, _081E2924 @ =0x00008022
- cmp r1, r0
- bne _081E290C
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bne _081E290C
- movs r0, 0
- strb r0, [r6]
-_081E290C:
- ldr r0, _081E291C @ =gRfuLinkStatus
- ldr r2, [r0]
- ldrb r1, [r2]
- cmp r1, 0x1
- bne _081E2928
- ldrb r0, [r2, 0xE]
- strb r1, [r2, 0xE]
- b _081E2936
- .align 2, 0
-_081E291C: .4byte gRfuLinkStatus
-_081E2920: .4byte gRfuFixed
-_081E2924: .4byte 0x00008022
-_081E2928:
- movs r0, 0x1
- mov r1, r10
- lsls r0, r1
- ldrb r1, [r2, 0xE]
- orrs r0, r1
- ldrb r1, [r2, 0xE]
- strb r0, [r2, 0xE]
-_081E2936:
- mov r2, r8
- ldrb r0, [r2]
- adds r0, r5, r0
- lsls r0, 16
- lsrs r0, 16
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end rfu_STC_NI_constructLLSF
-
- thumb_func_start rfu_STC_UNI_constructLLSF
-rfu_STC_UNI_constructLLSF: @ 81E2950
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r6, r1, 0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r1, _081E2978 @ =gRfuSlotStatusUNI
- lsls r0, 2
- adds r0, r1
- ldr r4, [r0]
- ldrb r0, [r4, 0x2]
- cmp r0, 0
- beq _081E2974
- ldrb r0, [r4, 0x3]
- cmp r0, 0
- bne _081E297C
-_081E2974:
- movs r0, 0
- b _081E2A18
- .align 2, 0
-_081E2978: .4byte gRfuSlotStatusUNI
-_081E297C:
- ldr r0, _081E29F4 @ =gRfuLinkStatus
- ldr r2, [r0]
- ldrb r0, [r2]
- lsls r0, 4
- ldr r1, _081E29F8 @ =_Str_RfuHeader
- adds r5, r0, r1
- ldrh r0, [r4]
- movs r1, 0xF
- ands r1, r0
- ldrb r0, [r5, 0x3]
- lsls r1, r0
- ldrh r0, [r4, 0x4]
- orrs r1, r0
- str r1, [sp]
- ldrb r0, [r2]
- cmp r0, 0x1
- bne _081E29A6
- ldrb r0, [r4, 0x3]
- lsls r0, 18
- orrs r1, r0
- str r1, [sp]
-_081E29A6:
- mov r2, sp
- movs r3, 0
- ldr r1, _081E29FC @ =gRfuFixed
- mov r12, r1
- add r7, sp, 0x4
- ldrb r0, [r5]
- cmp r3, r0
- bcs _081E29CE
-_081E29B6:
- ldr r1, [r6]
- ldrb r0, [r2]
- strb r0, [r1]
- adds r2, 0x1
- adds r1, 0x1
- str r1, [r6]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- ldrb r1, [r5]
- cmp r3, r1
- bcc _081E29B6
-_081E29CE:
- ldr r0, [r4, 0x8]
- str r0, [sp, 0x4]
- mov r2, r12
- ldr r0, [r2]
- ldrh r2, [r4, 0x4]
- ldr r3, [r0, 0x4]
- adds r0, r7, 0
- adds r1, r6, 0
- bl _call_via_r3
- ldr r0, _081E29F4 @ =gRfuLinkStatus
- ldr r2, [r0]
- ldrb r0, [r2]
- cmp r0, 0x1
- bne _081E2A00
- ldrb r0, [r2, 0xE]
- movs r0, 0x10
- b _081E2A0C
- .align 2, 0
-_081E29F4: .4byte gRfuLinkStatus
-_081E29F8: .4byte _Str_RfuHeader
-_081E29FC: .4byte gRfuFixed
-_081E2A00:
- movs r0, 0x10
- mov r1, r8
- lsls r0, r1
- ldrb r1, [r2, 0xE]
- orrs r0, r1
- ldrb r1, [r2, 0xE]
-_081E2A0C:
- strb r0, [r2, 0xE]
- ldrh r0, [r4, 0x4]
- ldrb r5, [r5]
- adds r0, r5
- lsls r0, 16
- lsrs r0, 16
-_081E2A18:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end rfu_STC_UNI_constructLLSF
-
- thumb_func_start rfu_REQ_recvData
-rfu_REQ_recvData: @ 81E2A24
- push {r4,lr}
- ldr r0, _081E2A58 @ =gRfuLinkStatus
- ldr r4, [r0]
- ldrb r0, [r4]
- cmp r0, 0xFF
- beq _081E2A50
- ldr r2, _081E2A5C @ =gRfuStatic
- ldr r3, [r2]
- ldrb r0, [r4, 0x4]
- ldrb r1, [r4, 0x5]
- orrs r0, r1
- ldrb r1, [r4, 0x6]
- orrs r0, r1
- movs r1, 0
- strb r0, [r3, 0x3]
- ldr r0, [r2]
- strb r1, [r0, 0x4]
- ldr r0, _081E2A60 @ =rfu_CB_recvData
- bl STWI_set_Callback_M
- bl STWI_send_DataRxREQ
-_081E2A50:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081E2A58: .4byte gRfuLinkStatus
-_081E2A5C: .4byte gRfuStatic
-_081E2A60: .4byte rfu_CB_recvData
- thumb_func_end rfu_REQ_recvData
-
- thumb_func_start rfu_CB_recvData
-rfu_CB_recvData: @ 81E2A64
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r1, 16
- lsrs r7, r1, 16
- cmp r7, 0
- bne _081E2B28
- ldr r0, _081E2AA0 @ =gRfuFixed
- ldr r0, [r0]
- adds r0, 0xDC
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _081E2B28
- ldr r0, _081E2AA4 @ =gRfuStatic
- ldr r0, [r0]
- strb r7, [r0, 0x1]
- ldr r0, _081E2AA8 @ =gRfuLinkStatus
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _081E2AAC
- bl rfu_STC_PARENT_analyzeRecvPacket
- b _081E2AB0
- .align 2, 0
-_081E2AA0: .4byte gRfuFixed
-_081E2AA4: .4byte gRfuStatic
-_081E2AA8: .4byte gRfuLinkStatus
-_081E2AAC:
- bl rfu_STC_CHILD_analyzeRecvPacket
-_081E2AB0:
- movs r6, 0
- ldr r0, _081E2B40 @ =0x00008043
- mov r8, r0
- ldr r3, _081E2B44 @ =gRfuLinkStatus
-_081E2AB8:
- ldr r0, _081E2B48 @ =gRfuSlotStatusNI
- lsls r1, r6, 2
- adds r1, r0
- ldr r4, [r1]
- ldrh r0, [r4, 0x34]
- cmp r0, r8
- bne _081E2B0A
- ldr r0, _081E2B4C @ =gRfuStatic
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- asrs r0, r6
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _081E2B0A
- adds r5, r4, 0
- adds r5, 0x34
- adds r0, r4, 0
- adds r0, 0x61
- ldrb r2, [r0]
- cmp r2, 0x1
- bne _081E2AEE
- ldr r1, [r3]
- lsls r2, r6
- ldrb r0, [r1, 0x7]
- orrs r2, r0
- strb r2, [r1, 0x7]
-_081E2AEE:
- adds r0, r6, 0
- movs r1, 0x1
- adds r2, r5, 0
- str r3, [sp]
- bl rfu_STC_releaseFrame
- ldr r3, [sp]
- ldr r2, [r3]
- ldrb r1, [r5, 0x1A]
- ldrb r0, [r2, 0x5]
- bics r0, r1
- strb r0, [r2, 0x5]
- movs r0, 0x46
- strh r0, [r4, 0x34]
-_081E2B0A:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x3
- bls _081E2AB8
- ldr r0, _081E2B4C @ =gRfuStatic
- ldr r1, [r0]
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _081E2B28
- adds r7, r0, 0
- movs r1, 0xE0
- lsls r1, 3
- adds r0, r1, 0
- orrs r7, r0
-_081E2B28:
- mov r0, r9
- adds r1, r7, 0
- bl rfu_STC_REQ_callback
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081E2B40: .4byte 0x00008043
-_081E2B44: .4byte gRfuLinkStatus
-_081E2B48: .4byte gRfuSlotStatusNI
-_081E2B4C: .4byte gRfuStatic
- thumb_func_end rfu_CB_recvData
-
- thumb_func_start rfu_STC_PARENT_analyzeRecvPacket
-rfu_STC_PARENT_analyzeRecvPacket: @ 81E2B50
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r1, _081E2BE0 @ =gRfuFixed
- ldr r0, [r1]
- adds r0, 0xDC
- ldr r0, [r0]
- ldr r0, [r0, 0x4]
- lsrs r3, r0, 8
- movs r5, 0
- mov r12, r1
- movs r7, 0x1F
- ldr r4, _081E2BE4 @ =gRfuStatic
- movs r6, 0x1
-_081E2B6A:
- mov r0, sp
- adds r1, r0, r5
- adds r0, r3, 0
- ands r0, r7
- strb r0, [r1]
- lsrs r3, 5
- cmp r0, 0
- bne _081E2B86
- ldr r0, [r4]
- adds r1, r6, 0
- lsls r1, r5
- ldrb r2, [r0, 0x1]
- orrs r1, r2
- strb r1, [r0, 0x1]
-_081E2B86:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _081E2B6A
- mov r1, r12
- ldr r0, [r1]
- adds r0, 0xDC
- ldr r0, [r0]
- adds r6, r0, 0
- adds r6, 0x8
- movs r5, 0
-_081E2B9E:
- mov r0, sp
- adds r1, r0, r5
- ldrb r0, [r1]
- adds r7, r5, 0x1
- cmp r0, 0
- beq _081E2BD0
- adds r4, r1, 0
-_081E2BAC:
- ldrb r2, [r4]
- adds r0, r5, 0
- adds r1, r6, 0
- bl rfu_STC_analyzeLLSF
- lsls r0, 24
- lsrs r0, 24
- adds r6, r0
- ldrb r1, [r4]
- subs r1, r0
- strb r1, [r4]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _081E2BD0
- lsls r0, r1, 24
- cmp r0, 0
- bne _081E2BAC
-_081E2BD0:
- lsls r0, r7, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _081E2B9E
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081E2BE0: .4byte gRfuFixed
-_081E2BE4: .4byte gRfuStatic
- thumb_func_end rfu_STC_PARENT_analyzeRecvPacket
-
- thumb_func_start rfu_STC_CHILD_analyzeRecvPacket
-rfu_STC_CHILD_analyzeRecvPacket: @ 81E2BE8
- push {r4-r6,lr}
- ldr r0, _081E2C38 @ =gRfuFixed
- ldr r0, [r0]
- adds r0, 0xDC
- ldr r1, [r0]
- ldrh r0, [r1, 0x4]
- movs r4, 0x7F
- ands r4, r0
- adds r5, r1, 0
- adds r5, 0x8
- cmp r4, 0
- bne _081E2C08
- ldr r0, _081E2C3C @ =gRfuStatic
- ldr r1, [r0]
- movs r0, 0xF
- strb r0, [r1, 0x1]
-_081E2C08:
- movs r0, 0x80
- lsls r0, 8
- adds r6, r0, 0
-_081E2C0E:
- cmp r4, 0
- beq _081E2C30
- movs r0, 0
- adds r1, r5, 0
- adds r2, r4, 0
- bl rfu_STC_analyzeLLSF
- lsls r0, 16
- lsrs r0, 16
- adds r5, r0
- subs r0, r4, r0
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- ands r0, r6
- cmp r0, 0
- beq _081E2C0E
-_081E2C30:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081E2C38: .4byte gRfuFixed
-_081E2C3C: .4byte gRfuStatic
- thumb_func_end rfu_STC_CHILD_analyzeRecvPacket
-
thumb_func_start rfu_STC_analyzeLLSF
rfu_STC_analyzeLLSF: @ 81E2C40
push {r4-r7,lr}
diff --git a/include/librfu.h b/include/librfu.h
index 9482b94c4..ff160e207 100644
--- a/include/librfu.h
+++ b/include/librfu.h
@@ -3,6 +3,12 @@
#include "main.h"
+/* TODOs:
+ * - documentation
+ * - check if any field needs to be volatile
+ * - decompile librfu_intr.s once arm support is back again
+ */
+
enum
{
RFU_RESET = 0x10,
@@ -134,16 +140,25 @@ struct RfuIntrStruct
struct RfuSlotStatusUNI
{
- u16 sendState;
- u8 dataReadyFlag;
- u8 bmSlot;
- u16 payloadSize;
- void *src; // TODO: is it correct?
- u16 recvState;
- u16 errorCode;
- u16 dataSize;
- u8 newDataFlag;
- u8 dataBlockFlag;
+ struct
+ {
+ struct UNISend
+ {
+ u16 state;
+ u8 dataReadyFlag;
+ u8 bmSlot;
+ u16 payloadSize;
+ const void *src;
+ } send;
+ struct UNIRecv
+ {
+ u16 state;
+ u16 errorCode;
+ u16 dataSize;
+ u8 newDataFlag;
+ u8 dataBlockFlag;
+ } recv;
+ } sub;
void *recvBuffer;
u32 recvBufferSize;
};
@@ -152,16 +167,15 @@ struct NIComm
{
u16 state;
u16 failCounter;
- u32 nowP[4]; // ???
+ const u8 *nowP[4];
u32 remainSize;
u16 errorCode;
u8 bmSlot;
- u8 unk_1b;
u8 recvAckFlag[4];
u8 ack;
u8 phase;
- u8 n[4]; // ???
- void *src;
+ u8 n[4];
+ const void *src;
u8 bmSlotOrg;
u8 dataType;
u16 payloadSize;
@@ -170,16 +184,19 @@ struct NIComm
struct RfuSlotStatusNI
{
- struct NIComm send;
- struct NIComm recv;
+ struct
+ {
+ struct NIComm send;
+ struct NIComm recv;
+ } sub;
void *recvBuffer;
- void *recvBufferSize;
+ u32 recvBufferSize;
};
struct RfuFixed
{
void (*reqCallback)(u16, u16);
- void *fastCopyPtr;
+ void (*fastCopyPtr)(const u8 **, u8 **, s32);
u16 fastCopyBuffer[24];
u32 fastCopyBuffer2[12];
u32 LLFBuffer[29];
@@ -190,7 +207,7 @@ struct RfuStatic
{
u8 flags;
u8 NIEndRecvFlag;
- u8 RecvRenewalFlag;
+ u8 recvRenewalFlag;
u8 commExistFlag;
u8 recvErrorFlag;
u8 recoveryBmSlot;
@@ -231,7 +248,7 @@ struct RfuLinkStatus
u8 findParentCount;
u8 watchInterval;
u8 strength[4];
- u8 LLFReadyFlag;
+ vu8 LLFReadyFlag;
u8 remainLLFrameSizeParent;
u8 remainLLFrameSizeChild[4];
struct RfuTgtData partner[4];
@@ -275,7 +292,7 @@ void rfu_REQ_sendData(u8);
void rfu_setMSCCallback(void (*func)(u16));
void rfu_setREQCallback(void (*func)(u16, u16));
bool8 rfu_getMasterSlave(void);
-void rfu_REQBN_watchLink(u16 a0, u8 *a1, u8 *a2, u8 *a3);
+s32 rfu_REQBN_watchLink(u16 a0, u8 *a1, u8 *a2, u8 *a3);
u16 rfu_syncVBlank(void);
void rfu_REQ_reset(void);
void rfu_REQ_configSystem(u16, u8, u8);
@@ -296,24 +313,24 @@ void rfu_REQ_changeMasterSlave(void);
void rfu_REQ_RFUStatus(void);
u32 rfu_getRFUStatus(u8 *status);
struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void);
-u8 rfu_NI_CHILD_setSendGameName(u8 a0, u8 a1);
-void rfu_clearSlot(u8 a0, u8 a1);
+s32 rfu_NI_CHILD_setSendGameName(u8 a0, u8 a1);
+s32 rfu_clearSlot(u8 a0, u8 a1);
void rfu_clearAllSlot(void);
-bool16 rfu_CHILD_getConnectRecoveryStatus(u8 *status);
+u16 rfu_CHILD_getConnectRecoveryStatus(u8 *status);
u16 rfu_getConnectParentStatus(u8 *status, u8 *a1);
bool16 rfu_UNI_PARENT_getDRAC_ACK(u8 *a0);
void rfu_REQ_disconnect(u8 who);
-void rfu_changeSendTarget(u8 a0, u8 who, u8 a2);
-void rfu_NI_stopReceivingData(u8 who);
+s32 rfu_changeSendTarget(u8 a0, u8 who, u8 a2);
+s32 rfu_NI_stopReceivingData(u8 who);
u16 rfu_initializeAPI(struct Unk_3001190 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam);
void rfu_setTimerInterrupt(u8 which, IntrFunc *intr);
-void rfu_setRecvBuffer(u8 a0, u8 a1, void *a2, size_t a3);
-bool16 rfu_UNI_setSendData(u8 flag, void *ptr, u8 size);
+s32 rfu_setRecvBuffer(u8 a0, u8 a1, void *a2, size_t a3);
+s32 rfu_UNI_setSendData(u8 flag, const void *ptr, u8 size);
void rfu_REQ_recvData(void);
void rfu_UNI_readySendData(u8 a0);
void rfu_UNI_clearRecvNewDataFlag(u8 a0);
void rfu_REQ_PARENT_resumeRetransmitAndChange(void);
-void rfu_NI_setSendData(u8, u8, const void *, u32);
+s32 rfu_NI_setSendData(u8, u8, const void *, u32);
// librfu_intr
void IntrSIO32(void);
diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c
index 96f4e9519..3bfa3b601 100644
--- a/src/librfu_rfu.c
+++ b/src/librfu_rfu.c
@@ -11,17 +11,31 @@ void rfu_CB_startSearchParent(u8, u16);
void rfu_CB_pollSearchParent(u8, u16);
void rfu_CB_pollConnectParent(u8, u16);
void rfu_CB_pollConnectParent(u8, u16);
+void rfu_CB_disconnect(u8, u16);
+void rfu_CB_CHILD_pollConnectRecovery(u8, u16);
+void rfu_CB_sendData(UNUSED u8, u16);
+void rfu_CB_sendData2(UNUSED u8, u16);
+void rfu_CB_sendData3(u8, u16);
+void rfu_CB_recvData(u8, u16);
s32 sub_81E349C(u8);
void rfu_enableREQCallback(bool8);
void rfu_STC_readChildList(void);
void rfu_STC_readParentCandidateList(void);
void rfu_STC_REQ_callback(u8, u16);
void rfu_STC_removeLinkData(u8, u8);
-void rfu_STC_fastCopy(u8 **a1, u8 **a2, s32 a3);
+void rfu_STC_fastCopy(const u8 **, u8 **, s32);
void rfu_STC_clearLinkStatus(u8);
void rfu_NI_checkCommFailCounter(void);
+u16 rfu_STC_setSendData_org(u8, u8, u8, const void *, u32);
+void rfu_constructSendLLFrame(void);
+u16 rfu_STC_NI_constructLLSF(u8, u8 **, struct NIComm *);
+u16 rfu_STC_UNI_constructLLSF(u8, u8 **);
+void rfu_STC_PARENT_analyzeRecvPacket(void);
+void rfu_STC_CHILD_analyzeRecvPacket(void);
+u16 rfu_STC_analyzeLLSF(u8, u8 *, u16);
extern const char _Str_RFU_MBOOT[];
+extern const u8 _Str_RfuHeader[];
struct RfuStruct *gRfuState;
ALIGNED(8) struct RfuSlotStatusUNI *gRfuSlotStatusUNI[4];
@@ -89,7 +103,7 @@ u16 rfu_initializeAPI(struct Unk_3001190 *unk0, u16 unk1, IntrFunc *interrupt, b
// rfu_REQ_changeMasterSlave is the function next to rfu_STC_fastCopy
for (r3 = ((void *)rfu_REQ_changeMasterSlave - (void *)rfu_STC_fastCopy) / sizeof(u16), --r3; r3 != 0xFFFF; --r3)
*dst++ = *src++;
- gRfuFixed->fastCopyPtr = (u8 *)gRfuFixed->fastCopyBuffer + 1;
+ gRfuFixed->fastCopyPtr = (void *)gRfuFixed->fastCopyBuffer + 1;
return 0;
}
@@ -734,3 +748,1080 @@ u16 rfu_syncVBlank(void)
--gRfuStatic->watchdogTimer;
return 0;
}
+
+s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04)
+{
+ u8 sp08 = 0;
+ u8 sp0C = 0;
+ u8 i;
+ s32 sp10, sp14;
+ u8 *r2;
+ u8 r9, r6, r3, r1, r0;
+
+ *r8 = 0;
+ *sp00 = 0;
+ *sp04 = 0;
+ if (gRfuLinkStatus->connMode == 0xFF || gRfuState->msMode == 0)
+ return 0;
+ if (gRfuStatic->flags & 4)
+ gRfuStatic->watchdogTimer = 360;
+ if (gRfuStatic->nowWatchInterval == 0)
+ {
+ gRfuStatic->nowWatchInterval = gRfuLinkStatus->watchInterval;
+ sp08 = 1;
+ }
+ if ((u8)r5 == 41)
+ {
+ u8 *r1 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data;
+
+ *r8 = r1[4];
+ *sp00 = r1[5];
+ if (*sp00 == 1)
+ *r8 = gRfuLinkStatus->connSlotFlag;
+ sp08 = 2;
+ }
+ else
+ {
+ if (r5 == 310)
+ {
+ r6 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[5];
+ r6 ^= gRfuLinkStatus->connSlotFlag;
+ *r8 = r6 & gRfuLinkStatus->connSlotFlag;
+ *sp00 = 1;
+ for (i = 0; i < NELEMS(gRfuLinkStatus->strength); ++i)
+ {
+ if ((*r8 >> i) & 1)
+ {
+ gRfuLinkStatus->strength[i] = 0;
+ rfu_STC_removeLinkData(i, 0);
+ }
+ }
+ }
+ if (sp08 == 0)
+ return 0;
+ }
+ sp10 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command;
+ sp14 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0];
+ STWI_set_Callback_M(rfu_CB_defaultCallback);
+ STWI_send_LinkStatusREQ();
+ sp0C = STWI_poll_CommandEnd();
+ if (sp0C == 0)
+ {
+ r2 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
+ for (i = 0; i < NELEMS(gRfuLinkStatus->strength); ++i)
+ gRfuLinkStatus->strength[i] = *r2++;
+ r9 = 0;
+ i = 0;
+ }
+ else
+ {
+ rfu_STC_REQ_callback(17, sp0C);
+ return sp0C;
+ }
+ for (; i < 4; ++i)
+ {
+ r6 = 1 << i;
+ if (sp0C == 0)
+ {
+ if (sp08 == 1 && (gRfuLinkStatus->connSlotFlag & r6))
+ {
+ if (gRfuLinkStatus->strength[i] == 0)
+ {
+ if (gRfuLinkStatus->connMode == 1)
+ {
+ ++gRfuStatic->linkEmergencyFlag[i];
+ if (gRfuStatic->linkEmergencyFlag[i] > 3)
+ {
+ *r8 |= r6;
+ *sp00 = sp08; // why not directly use 1?
+ }
+ }
+ else
+ {
+ STWI_send_SystemStatusREQ();
+ if (STWI_poll_CommandEnd() == 0)
+ {
+ if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0)
+ {
+ *r8 |= r6;
+ *sp00 = sp08;
+ }
+ else
+ {
+ if (++gRfuStatic->linkEmergencyFlag[i] > gRfuStatic->unk_1a)
+ {
+ gRfuStatic->linkEmergencyFlag[i] = 0;
+ STWI_send_DisconnectREQ(gRfuLinkStatus->connSlotFlag);
+ STWI_poll_CommandEnd();
+ *r8 |= r6;
+ *sp00 = sp08; // why not directly use 1?
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ gRfuStatic->linkEmergencyFlag[i] = sp0C; // why not directly use 0?
+ }
+ }
+ if (gRfuLinkStatus->connMode == 1 && gRfuLinkStatus->strength[i] != 0)
+ {
+ if (r6 & gRfuLinkStatus->linkLossSlotFlag)
+ {
+ if (gRfuLinkStatus->strength[i] > 10)
+ {
+ *sp04 |= r6;
+ gRfuLinkStatus->connSlotFlag |= r6;
+ gRfuLinkStatus->linkLossSlotFlag &= ~r6;
+ ++gRfuLinkStatus->connCount;
+ gRfuStatic->linkEmergencyFlag[i] = 0;
+ }
+ else
+ {
+ gRfuLinkStatus->strength[i] = 0;
+ }
+ }
+ else
+ {
+ if (!((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & r6))
+ {
+ STWI_send_SlotStatusREQ();
+ STWI_poll_CommandEnd();
+ r2 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data;
+ r3 = r2[1] - 1;
+ for (r2 += 8; r3 != 0; r2 += 4, --r3)
+ {
+ u16 r4 = *(u16 *)r2;
+
+ if (r2[2] == i && r4 == gRfuStatic->cidBak[i])
+ {
+ r9 |= 1 << i;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ r1 = gRfuLinkStatus->connSlotFlag;
+ r0 = *r8;
+ r0 &= r1;
+ if (r6 & r0)
+ rfu_STC_removeLinkData(i, 0);
+ }
+ if (r9 != 0)
+ {
+ STWI_send_DisconnectREQ(r9);
+ STWI_poll_CommandEnd();
+ }
+ // equivalent to:
+ // gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command = sp10;
+ *(u32 *)gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data = sp10;
+ gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] = sp14;
+ return 0;
+}
+
+void rfu_STC_removeLinkData(u8 r7, u8 r12)
+{
+ u8 r5 = 1 << r7;
+ s32 r6;
+
+ if ((gRfuLinkStatus->connSlotFlag & r5) && gRfuLinkStatus->connCount != 0)
+ --gRfuLinkStatus->connCount;
+ gRfuLinkStatus->connSlotFlag &= r6 = ~r5;
+ gRfuLinkStatus->linkLossSlotFlag |= r5;
+ if ((*(u32 *)gRfuLinkStatus & 0xFF00FF) == 0)
+ gRfuLinkStatus->connMode = 0xFF;
+ if (r12 != 0)
+ {
+ CpuFill16(0, &gRfuLinkStatus->partner[r7], sizeof(struct RfuTgtData));
+ gRfuLinkStatus->linkLossSlotFlag &= r6;
+ gRfuLinkStatus->getNameFlag &= r6;
+ gRfuLinkStatus->strength[r7] = 0;
+ }
+}
+
+void rfu_REQ_disconnect(u8 who)
+{
+ u16 r1;
+
+ if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & who)
+ {
+ gRfuStatic->recoveryBmSlot = who;
+ if (gRfuLinkStatus->connMode == 0xFF && gRfuStatic->flags & 0x80)
+ {
+ if (gRfuLinkStatus->linkLossSlotFlag & who)
+ rfu_CB_disconnect(48, 0);
+ }
+ else if (gRfuStatic->SCStartFlag
+ && (STWI_set_Callback_M(rfu_CB_defaultCallback),
+ STWI_send_SC_EndREQ(),
+ (r1 = STWI_poll_CommandEnd()) != 0))
+ {
+ rfu_STC_REQ_callback(27, r1);
+ }
+ else
+ {
+ STWI_set_Callback_M(rfu_CB_disconnect);
+ STWI_send_DisconnectREQ(who);
+ }
+ }
+}
+
+void rfu_CB_disconnect(u8 r6, u16 r5)
+{
+ u8 r4, r0;
+
+ if (r5 == 3 && gRfuLinkStatus->connMode == 0)
+ {
+ STWI_set_Callback_M(rfu_CB_defaultCallback);
+ STWI_send_SystemStatusREQ();
+ if (STWI_poll_CommandEnd() == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0)
+ r5 = 0;
+ }
+ gRfuStatic->recoveryBmSlot &= gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
+ gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8] = gRfuStatic->recoveryBmSlot;
+ if (r5 == 0)
+ {
+ for (r4 = 0; r4 < 4; ++r4)
+ {
+ r0 = 1 << r4;
+ if (r0 & gRfuStatic->recoveryBmSlot)
+ rfu_STC_removeLinkData(r4, 1);
+ }
+ }
+ if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) == 0)
+ gRfuLinkStatus->connMode = 0xFF;
+ rfu_STC_REQ_callback(r6, r5);
+ if (gRfuStatic->SCStartFlag)
+ {
+ STWI_set_Callback_M(rfu_CB_defaultCallback);
+ STWI_send_SC_StartREQ();
+ r5 = STWI_poll_CommandEnd();
+ if (r5 != 0)
+ rfu_STC_REQ_callback(25, r5);
+ }
+}
+
+void rfu_REQ_CHILD_startConnectRecovery(u8 r5)
+{
+ u8 i;
+
+ gRfuStatic->recoveryBmSlot = r5;
+ for (i = 0; i < 4 && !((r5 >> i) & 1); ++i)
+ ;
+ STWI_set_Callback_M(rfu_STC_REQ_callback);
+ // if i == 4, gRfuLinkStatus->partner[i].id becomes gRfuLinkStatus->my.id
+ STWI_send_CPR_StartREQ(gRfuLinkStatus->partner[i].id, gRfuLinkStatus->my.id, r5);
+}
+
+void rfu_REQ_CHILD_pollConnectRecovery(void)
+{
+ STWI_set_Callback_M(rfu_CB_CHILD_pollConnectRecovery);
+ STWI_send_CPR_PollingREQ();
+}
+
+void rfu_CB_CHILD_pollConnectRecovery(u8 r8, u16 r7)
+{
+ u8 r3, r4;
+ struct RfuLinkStatus *r2;
+
+ if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] == 0 && gRfuStatic->recoveryBmSlot)
+ {
+ gRfuLinkStatus->connMode = 0;
+ for (r4 = 0; r4 < NELEMS(gRfuStatic->linkEmergencyFlag); ++r4)
+ {
+ r3 = 1 << r4;
+ r2 = gRfuLinkStatus; // ???
+ if (gRfuStatic->recoveryBmSlot & r3 & r2->linkLossSlotFlag)
+ {
+ gRfuLinkStatus->connSlotFlag |= r3;
+ gRfuLinkStatus->linkLossSlotFlag &= ~r3;
+ ++gRfuLinkStatus->connCount;
+ gRfuStatic->linkEmergencyFlag[r4] = 0;
+ }
+ }
+ gRfuStatic->recoveryBmSlot = 0;
+ }
+ rfu_STC_REQ_callback(r8, r7);
+}
+
+u16 rfu_CHILD_getConnectRecoveryStatus(u8 *status)
+{
+ u8 r0;
+
+ *status = 0xFF;
+ r0 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] + 77;
+ if (r0 <= 1)
+ {
+ *status = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
+ return 0;
+ }
+ return 0x10;
+}
+
+void rfu_REQ_CHILD_endConnectRecovery(void)
+{
+ STWI_set_Callback_M(rfu_CB_CHILD_pollConnectRecovery);
+ STWI_send_CPR_EndREQ();
+}
+
+void rfu_STC_fastCopy(const u8 **src_p, u8 **dst_p, s32 size)
+{
+ const u8 *src = *src_p;
+ u8 *dst = *dst_p;
+ s32 i;
+
+ for (i = size - 1; i != -1; --i)
+ *dst++ = *src++;
+ *src_p = src;
+ *dst_p = dst;
+}
+
+void rfu_REQ_changeMasterSlave(void)
+{
+ if (STWI_read_status(1) == 1)
+ {
+ STWI_set_Callback_M(rfu_STC_REQ_callback);
+ STWI_send_MS_ChangeREQ();
+ }
+ else
+ {
+ rfu_STC_REQ_callback(39, 0);
+ }
+}
+
+bool8 rfu_getMasterSlave(void)
+{
+ bool8 r2 = STWI_read_status(1);
+
+ if (r2 == 1)
+ {
+ if (gRfuState->unk_2c)
+ {
+ if (gRfuState->reqActiveCommand == 39
+ || gRfuState->reqActiveCommand == 37
+ || gRfuState->reqActiveCommand == 55)
+ r2 = 0;
+ }
+ }
+ return r2;
+}
+
+void rfu_clearAllSlot(void)
+{
+ u16 i;
+ u16 IMEBackup = REG_IME;
+
+ REG_IME = 0;
+ for (i = 0; i < NELEMS(gRfuSlotStatusNI); ++i)
+ {
+ CpuFill16(0, gRfuSlotStatusNI[i], sizeof(gRfuSlotStatusNI[i]->sub));
+ CpuFill16(0, gRfuSlotStatusUNI[i], sizeof(gRfuSlotStatusUNI[i]->sub));
+ gRfuLinkStatus->remainLLFrameSizeChild[i] = 16;
+ }
+ gRfuLinkStatus->remainLLFrameSizeParent = 87;
+ gRfuLinkStatus->sendSlotNIFlag = 0;
+ gRfuLinkStatus->recvSlotNIFlag = 0;
+ gRfuLinkStatus->sendSlotUNIFlag = 0;
+ gRfuStatic->recvRenewalFlag = 0;
+ REG_IME = IMEBackup;
+}
+
+void rfu_STC_releaseFrame(u8 r5, u8 r3, struct NIComm *r4)
+{
+
+ if (!(gRfuStatic->flags & 0x80))
+ {
+ if (r3 == 0)
+ gRfuLinkStatus->remainLLFrameSizeParent += r4->payloadSize;
+ gRfuLinkStatus->remainLLFrameSizeParent += 3;
+ }
+ else
+ {
+ if (r3 == 0)
+ gRfuLinkStatus->remainLLFrameSizeChild[r5] += r4->payloadSize;
+ gRfuLinkStatus->remainLLFrameSizeChild[r5] += 2;
+ }
+}
+
+s32 rfu_clearSlot(u8 r8, u8 r7)
+{
+ u16 r10, r3, r1;
+ struct NIComm *r4;
+
+ if (r7 > 3)
+ return 0x400;
+ if ((r8 & 0xF) == 0)
+ return 0x600;
+ r10 = REG_IME;
+ REG_IME = 0;
+ if (r8 & 0xC)
+ {
+ for (r3 = 0; r3 < 2; ++r3)
+ {
+ r4 = NULL;
+ if (r3 == 0)
+ {
+ if (r8 & 4)
+ {
+ r4 = &gRfuSlotStatusNI[r7]->sub.send;
+ gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlotOrg;
+ }
+ }
+ else
+ {
+ if (r8 & 8)
+ {
+ r4 = &gRfuSlotStatusNI[r7]->sub.recv;
+ gRfuLinkStatus->recvSlotNIFlag &= ~(1 << r7);
+ }
+ }
+ if (r4 != NULL)
+ {
+ if (r4->state & 0x8000)
+ {
+ rfu_STC_releaseFrame(r7, r3, r4);
+ for (r1 = 0; r1 < 4; ++r1)
+ if ((r4->bmSlotOrg >> r1) & 1)
+ r4->failCounter = 0;
+ }
+ CpuFill16(0, r4, sizeof(struct NIComm));
+ }
+ }
+ }
+ if (r8 & 1)
+ {
+ struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[r7];
+
+ if (r3->sub.send.state & 0x8000)
+ {
+ if (!(gRfuStatic->flags & 0x80))
+ gRfuLinkStatus->remainLLFrameSizeParent += 3 + (u8)r3->sub.send.payloadSize;
+ else
+ gRfuLinkStatus->remainLLFrameSizeChild[r7] += 2 + (u8)r3->sub.send.payloadSize;
+ gRfuLinkStatus->sendSlotUNIFlag &= ~r3->sub.send.bmSlot;
+ }
+ CpuFill16(0, &r3->sub.send, sizeof(struct UNISend));
+ }
+ if (r8 & 2)
+ {
+ CpuFill16(0, &gRfuSlotStatusUNI[r7]->sub.recv, sizeof(struct UNIRecv));
+ }
+ REG_IME = r10;
+ return 0;
+}
+
+s32 rfu_setRecvBuffer(u8 r3, u8 r4, void *r5, size_t r6)
+{
+ if (r4 > 3)
+ return 0x400;
+ if (r3 & 0x20)
+ {
+ gRfuSlotStatusNI[r4]->recvBuffer = r5;
+ gRfuSlotStatusNI[r4]->recvBufferSize = r6;
+ }
+ else if (!(r3 & 0x10))
+ {
+ return 0x600;
+ }
+ else
+ {
+ gRfuSlotStatusUNI[r4]->recvBuffer = r5;
+ gRfuSlotStatusUNI[r4]->recvBufferSize = r6;
+ }
+ return 0;
+}
+
+s32 rfu_NI_setSendData(u8 a1, u8 a2, const void *a3, u32 a4)
+{
+ return rfu_STC_setSendData_org(32, a1, a2, a3, a4);
+}
+
+s32 rfu_UNI_setSendData(u8 flag, const void *ptr, u8 size)
+{
+ u8 r0;
+
+ if (gRfuLinkStatus->connMode == 1)
+ r0 = size + 3;
+ else
+ r0 = size + 2;
+ return rfu_STC_setSendData_org(16, flag, r0, ptr, 0);
+}
+
+s32 rfu_NI_CHILD_setSendGameName(u8 a1, u8 a2)
+{
+ return rfu_STC_setSendData_org(64, 1 << a1, a2, &gRfuLinkStatus->my.serialNum, 26);
+}
+
+u16 rfu_STC_setSendData_org(u8 r6, u8 r3, u8 r8, const void *sp00, u32 sp28)
+{
+ u8 r2, r0;
+ u8 r4;
+ u8 *r9;
+ u8 r5;
+ u8 i;
+ u16 sp04;
+ struct RfuSlotStatusUNI *r1;
+ struct RfuSlotStatusNI *r12;
+
+ if (gRfuLinkStatus->connMode == 0xFF)
+ return 0x301;
+ if (!(r3 & 0xF))
+ return 0x400;
+ if (((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & r3) != r3)
+ return 0x401;
+ if (r6 & 0x10)
+ r0 = gRfuLinkStatus->sendSlotUNIFlag;
+ else
+ r0 = gRfuLinkStatus->sendSlotNIFlag;
+ if (r0 & r3)
+ return 0x402;
+ for (r2 = 0; r2 < 4 && !((r3 >> r2) & 1); ++r2)
+ ;
+ if (gRfuLinkStatus->connMode == 1)
+ r9 = &gRfuLinkStatus->remainLLFrameSizeParent;
+ else if (gRfuLinkStatus->connMode == 0)
+ r9 = &gRfuLinkStatus->remainLLFrameSizeChild[r2];
+ r4 = _Str_RfuHeader[16 * gRfuLinkStatus->connMode];
+ if (r8 > *r9 || r8 <= r4)
+ return 0x500;
+ sp04 = REG_IME;
+ REG_IME = 0;
+ r5 = r6 & 0x20;
+ if (r5 || r6 == 0x40)
+ {
+ u8 *r1; // a hack to swap instructions
+
+ r12 = gRfuSlotStatusNI[r2];
+ r1 = NULL;
+ r12->sub.send.errorCode = 0;
+ *r12->sub.send.nowP = r1 = &r12->sub.send.dataType;
+ r12->sub.send.remainSize = 7;
+ r12->sub.send.bmSlotOrg = r3;
+ r12->sub.send.bmSlot = r3;
+ r12->sub.send.payloadSize = r8 - r4;
+ if (r5 != 0)
+ *r1 = 0;
+ else
+ *r1 = 1;
+ r12->sub.send.dataSize = sp28;
+ r12->sub.send.src = sp00;
+ r12->sub.send.ack = 0;
+ r12->sub.send.phase = 0;
+ #ifndef NONMATCHING // to fix r2, r3, r4, r5 register roulette
+ asm("":::"r2");
+ #endif
+ for (i = 0; i < NELEMS(r12->sub.send.recvAckFlag); ++i)
+ {
+ r12->sub.send.recvAckFlag[i] = 0;
+ r12->sub.send.n[i] = 1;
+ }
+ for (r2 = 0; r2 < NELEMS(gRfuSlotStatusNI); ++r2)
+ if ((r3 >> r2) & 1)
+ gRfuSlotStatusNI[r2]->sub.send.failCounter = 0;
+ gRfuLinkStatus->sendSlotNIFlag |= r3;
+ *r9 -= r8;
+ r12->sub.send.state = 0x8021;
+ }
+ else if (r6 & 0x10)
+ {
+ r1 = gRfuSlotStatusUNI[r2];
+ r1->sub.send.bmSlot = r3;
+ r1->sub.send.src = sp00;
+ r1->sub.send.payloadSize = r8 - r4;
+ *r9 -= r8;
+ r1->sub.send.state = 0x8024;
+ gRfuLinkStatus->sendSlotUNIFlag |= r3;
+ }
+ REG_IME = sp04;
+ return 0;
+}
+
+s32 rfu_changeSendTarget(u8 r3, u8 r7, u8 r6)
+{
+ struct RfuSlotStatusNI *r5;
+ u16 r8;
+ u8 r2;
+
+ if (r7 >= NELEMS(gRfuSlotStatusNI))
+ return 0x400;
+ if (r3 == 0x20)
+ {
+ r5 = gRfuSlotStatusNI[r7];
+ if ((r5->sub.send.state & 0x8000)
+ && (r5->sub.send.state & 0x20))
+ {
+ r3 = r6 ^ r5->sub.send.bmSlot;
+
+ if (!(r3 & r6))
+ {
+ if (r3)
+ {
+ r8 = REG_IME;
+ REG_IME = 0;
+ for (r2 = 0; r2 < NELEMS(gRfuSlotStatusNI); ++r2)
+ {
+ if ((r3 >> r2) & 1)
+ gRfuSlotStatusNI[r2]->sub.send.failCounter = 0;
+ }
+ gRfuLinkStatus->sendSlotNIFlag &= ~r3;
+ r5->sub.send.bmSlot = r6;
+ if ((r6 << 24) == 0) // The shift doesn't make any sense.
+ {
+ rfu_STC_releaseFrame(r7, 0, &r5->sub.send);
+ r5->sub.send.state = 39;
+ }
+ REG_IME = r8;
+ }
+ }
+ else
+ {
+ return 0x404;
+ }
+ }
+ else
+ {
+ return 0x403;
+ }
+ }
+ else
+ {
+ if (r3 == 16)
+ {
+ s32 r3;
+
+ if (gRfuSlotStatusUNI[r7]->sub.send.state != 0x8024)
+ return 0x403;
+ for (r3 = 0, r2 = 0; r2 < NELEMS(gRfuSlotStatusUNI); ++r2)
+ if (r2 != r7)
+ r3 |= gRfuSlotStatusUNI[r2]->sub.send.bmSlot;
+ if (r6 & r3)
+ return 0x404;
+ r8 = REG_IME;
+ REG_IME = 0;
+ gRfuLinkStatus->sendSlotUNIFlag &= ~gRfuSlotStatusUNI[r7]->sub.send.bmSlot;
+ gRfuLinkStatus->sendSlotUNIFlag |= r6;
+ gRfuSlotStatusUNI[r7]->sub.send.bmSlot = r6;
+ REG_IME = r8;
+ }
+ else
+ {
+ return 0x600;
+ }
+ }
+ return 0;
+}
+
+s32 rfu_NI_stopReceivingData(u8 who)
+{
+#ifndef NONMATCHING // r4, r5 register swap
+ register struct NIComm *r5 asm("r5");
+#else
+ struct NIComm *r5;
+#endif
+ u16 r4, r1;
+
+ if (who > 3)
+ return 0x400;
+ r5 = &gRfuSlotStatusNI[who]->sub.recv;
+ r4 = REG_IME;
+ REG_IME = 0;
+ if (gRfuSlotStatusNI[who]->sub.recv.state & 0x8000)
+ {
+ if (gRfuSlotStatusNI[who]->sub.recv.state == 0x8043)
+ gRfuSlotStatusNI[who]->sub.recv.state = 72;
+ else
+ gRfuSlotStatusNI[who]->sub.recv.state = 71;
+ gRfuLinkStatus->recvSlotNIFlag &= ~(1 << who);
+ rfu_STC_releaseFrame(who, 1, r5);
+ }
+ REG_IME = r4;
+ return 0;
+}
+
+s32 rfu_UNI_changeAndReadySendData(u8 r3, const void *r7, u8 r5)
+{
+ struct UNISend *r4;
+ u8 *r6;
+ u16 r1;
+ u8 r3_;
+
+ if (r3 >= 4)
+ return 0x400;
+ r4 = &gRfuSlotStatusUNI[r3]->sub.send;
+ if (r4->state != 0x8024)
+ return 0x403;
+ if (gRfuLinkStatus->connMode == 1)
+ {
+ r6 = &gRfuLinkStatus->remainLLFrameSizeParent;
+ r3_ = gRfuLinkStatus->remainLLFrameSizeParent + (u8)r4->payloadSize;
+ }
+ else
+ {
+ r6 = &gRfuLinkStatus->remainLLFrameSizeChild[r3];
+ r3_ = gRfuLinkStatus->remainLLFrameSizeChild[r3] + (u8)r4->payloadSize;
+ }
+ if (r3_ < r5)
+ return 0x500;
+ r1 = REG_IME;
+ REG_IME = 0;
+ r4->src = r7;
+ *r6 = r3_ - r5;
+ r4->payloadSize = r5;
+ r4->dataReadyFlag = 1;
+ REG_IME = r1;
+ return 0;
+}
+
+void rfu_UNI_readySendData(u8 a1)
+{
+ if (a1 < NELEMS(gRfuSlotStatusUNI))
+ {
+ if (gRfuSlotStatusUNI[a1]->sub.send.state == 0x8024)
+ gRfuSlotStatusUNI[a1]->sub.send.dataReadyFlag = 1;
+ }
+}
+
+void rfu_UNI_clearRecvNewDataFlag(u8 a1)
+{
+ if (a1 < NELEMS(gRfuSlotStatusUNI))
+ gRfuSlotStatusUNI[a1]->sub.recv.newDataFlag = 0;
+}
+
+void rfu_REQ_sendData(u8 r5)
+{
+ if (gRfuLinkStatus->connMode != 0xFF)
+ {
+ if (gRfuLinkStatus->connMode == 1
+ && !(gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag))
+ {
+ if (gRfuStatic->commExistFlag)
+ {
+ gRfuStatic->emberCount = 16;
+ gRfuStatic->nullFrameCount = 0;
+ }
+ if (gRfuStatic->emberCount)
+ --gRfuStatic->emberCount;
+ else
+ ++gRfuStatic->nullFrameCount;
+ if (gRfuStatic->emberCount
+ || !(gRfuStatic->nullFrameCount & 0xF))
+ {
+ gRfuFixed->LLFBuffer[0] = 1;
+ gRfuFixed->LLFBuffer[4] = 0xFF;
+ STWI_set_Callback_M(rfu_CB_sendData3);
+ if (r5 == 0)
+ STWI_send_DataTxREQ(gRfuFixed->LLFBuffer, 1);
+ else
+ STWI_send_DataTxAndChangeREQ(gRfuFixed->LLFBuffer, 1);
+ return;
+ }
+ }
+ else
+ {
+ if (!gRfuLinkStatus->LLFReadyFlag)
+ rfu_constructSendLLFrame();
+ if (gRfuLinkStatus->LLFReadyFlag)
+ {
+ STWI_set_Callback_M(rfu_CB_sendData);
+ if (r5 != 0)
+ {
+ STWI_send_DataTxAndChangeREQ(gRfuFixed->LLFBuffer, gRfuStatic->totalPacketSize + 4);
+ return;
+ }
+ STWI_send_DataTxREQ(gRfuFixed->LLFBuffer, gRfuStatic->totalPacketSize + 4);
+ }
+ }
+ if (r5 != 0)
+ {
+ if (gRfuLinkStatus->connMode == 1)
+ {
+ if (gRfuState->callbackS != NULL)
+ gRfuState->callbackS(39);
+ }
+ else
+ {
+ STWI_set_Callback_M(rfu_CB_sendData2);
+ STWI_send_MS_ChangeREQ();
+ }
+ }
+ }
+}
+
+void rfu_CB_sendData(UNUSED u8 r0, u16 r7)
+{
+ u8 r6;
+ struct NIComm *r4;
+
+ if (r7 == 0)
+ {
+ for (r6 = 0; r6 < NELEMS(gRfuSlotStatusNI); ++r6)
+ {
+ if (gRfuSlotStatusUNI[r6]->sub.send.dataReadyFlag)
+ gRfuSlotStatusUNI[r6]->sub.send.dataReadyFlag = 0;
+ r4 = &gRfuSlotStatusNI[r6]->sub.send;
+ if (r4->state == 0x8020)
+ {
+ rfu_STC_releaseFrame(r6, 0, r4);
+ gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlot;
+ if (r4->dataType == 1)
+ gRfuLinkStatus->getNameFlag |= 1 << r6;
+ r4->state = 38;
+ }
+ }
+ }
+ gRfuLinkStatus->LLFReadyFlag = 0;
+ rfu_STC_REQ_callback(36, r7);
+}
+
+void rfu_CB_sendData2(UNUSED u8 r0, u16 r1)
+{
+ rfu_STC_REQ_callback(36, r1);
+}
+
+void rfu_CB_sendData3(u8 r0, u16 r1)
+{
+ if (r1 != 0)
+ rfu_STC_REQ_callback(36, r1);
+ else if (r0 == 0xFF)
+ rfu_STC_REQ_callback(0xFF, 0);
+}
+
+void rfu_constructSendLLFrame(void)
+{
+ u32 r8, r5;
+ u8 r6;
+ u8 *sp00;
+ struct RfuSlotStatusNI *r2;
+
+ if (gRfuLinkStatus->connMode != 0xFF
+ && gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag)
+ {
+ gRfuLinkStatus->LLFReadyFlag = 0;
+ r8 = 0;
+ sp00 = (u8 *)&gRfuFixed->LLFBuffer[1];
+ for (r6 = 0; r6 < NELEMS(gRfuSlotStatusUNI); ++r6)
+ {
+ r5 = 0;
+ if (gRfuSlotStatusNI[r6]->sub.send.state & 0x8000)
+ r5 = rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->sub.send);
+ if (gRfuSlotStatusNI[r6]->sub.recv.state & 0x8000)
+ r5 += rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->sub.recv);
+ if (gRfuSlotStatusUNI[r6]->sub.send.state == 0x8024)
+ r5 += rfu_STC_UNI_constructLLSF(r6, &sp00);
+ if (r5 != 0)
+ {
+ if (gRfuLinkStatus->connMode == 1)
+ r8 += r5;
+ else
+ r8 |= r5 << (5 * r6 + 8);
+ }
+ }
+ if (r8 != 0)
+ {
+ while ((u32)sp00 & 3)
+ *sp00++ = 0;
+ gRfuFixed->LLFBuffer[0] = r8;
+ if (gRfuLinkStatus->connMode == 0)
+ {
+ u8 *r0 = sp00 - offsetof(struct RfuFixed, LLFBuffer[1]);
+
+ // Does the volatile qualifier make sense?
+ // It's the same as:
+ // asm("":::"memory");
+ r8 = r0 - *(u8 *volatile *)&gRfuFixed;
+ }
+ }
+ gRfuStatic->totalPacketSize = r8;
+ }
+}
+
+u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4)
+{
+ u16 r5;
+ u32 sp00;
+ u8 i;
+ u8 *r2;
+ const u8 *r8 = &_Str_RfuHeader[16 * gRfuLinkStatus->connMode];
+
+ if (r4->state == 0x8022)
+ {
+ while (r4->nowP[r4->phase] >= (const u8 *)r4->src + r4->dataSize)
+ {
+ ++r4->phase;
+ if (r4->phase == 4)
+ r4->phase = 0;
+ }
+ }
+ if (r4->state & 0x40)
+ {
+ r5 = 0;
+ }
+ else if (r4->state == 0x8022)
+ {
+ if (r4->nowP[r4->phase] + r4->payloadSize > (const u8 *)r4->src + r4->dataSize)
+ r5 = (const u8 *)r4->src + r4->dataSize - r4->nowP[r4->phase];
+ else
+ r5 = r4->payloadSize;
+ }
+ else
+ {
+ if (r4->remainSize >= r4->payloadSize)
+ r5 = r4->payloadSize;
+ else
+ r5 = r4->remainSize;
+ }
+ sp00 = (r4->state & 0xF) << r8[3]
+ | r4->ack << r8[4]
+ | r4->phase << r8[5]
+ | r4->n[r4->phase] << r8[6]
+ | r5;
+ if (gRfuLinkStatus->connMode == 1)
+ sp00 |= r4->bmSlot << 18;
+ r2 = (u8 *)&sp00;
+ for (i = 0; i < *r8; ++i)
+ *(*r12)++ = *r2++;
+ if (r5 != 0)
+ {
+ const u8 *sp04 = r4->nowP[r4->phase];
+
+ gRfuFixed->fastCopyPtr(&sp04, r12, r5);
+ }
+ if (r4->state == 0x8022)
+ {
+ ++r4->phase;
+ if (r4->phase == 4)
+ r4->phase = 0;
+ }
+ if (gRfuLinkStatus->connMode == 1)
+ gRfuLinkStatus->LLFReadyFlag = 1;
+ else
+ gRfuLinkStatus->LLFReadyFlag |= 1 << r10;
+ return r5 + *r8;
+}
+
+u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6)
+{
+ const u8 *r5;
+ const u8 *sp04;
+ u32 sp00;
+ u8 *r2;
+ u8 i;
+ struct UNISend *r4 = &gRfuSlotStatusUNI[r8]->sub.send;
+
+ if (!r4->dataReadyFlag || !r4->bmSlot)
+ return 0;
+ r5 = &_Str_RfuHeader[16 * gRfuLinkStatus->connMode];
+ sp00 = (r4->state & 0xF) << r5[3]
+ | r4->payloadSize;
+ if (gRfuLinkStatus->connMode == 1)
+ sp00 |= r4->bmSlot << 18;
+ r2 = (u8 *)&sp00;
+ for (i = 0; i < *r5; ++i)
+ *(*r6)++ = *r2++;
+ sp04 = r4->src;
+ gRfuFixed->fastCopyPtr(&sp04, r6, r4->payloadSize);
+ if (gRfuLinkStatus->connMode == 1)
+ gRfuLinkStatus->LLFReadyFlag = 16;
+ else
+ gRfuLinkStatus->LLFReadyFlag |= 16 << r8;
+ return *r5 + r4->payloadSize;
+}
+
+void rfu_REQ_recvData(void)
+{
+ if (gRfuLinkStatus->connMode != 0xFF)
+ {
+ gRfuStatic->commExistFlag = gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag;
+ gRfuStatic->recvErrorFlag = 0;
+ STWI_set_Callback_M(rfu_CB_recvData);
+ STWI_send_DataRxREQ();
+ }
+}
+
+void rfu_CB_recvData(u8 r9, u16 r7)
+{
+ u8 r6;
+ struct RfuSlotStatusNI *r4;
+ struct NIComm *r5;
+
+ if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1])
+ {
+ gRfuStatic->NIEndRecvFlag = 0;
+ if (gRfuLinkStatus->connMode == 1)
+ rfu_STC_PARENT_analyzeRecvPacket();
+ else
+ rfu_STC_CHILD_analyzeRecvPacket();
+ for (r6 = 0; r6 < NELEMS(gRfuSlotStatusNI); ++r6)
+ {
+ r4 = gRfuSlotStatusNI[r6];
+ if (r4->sub.recv.state == 0x8043 && !((gRfuStatic->NIEndRecvFlag >> r6) & 1))
+ {
+ r5 = &r4->sub.recv;
+ if (r5->dataType == 1)
+ gRfuLinkStatus->getNameFlag |= 1 << r6;
+ rfu_STC_releaseFrame(r6, 1, r5);
+ gRfuLinkStatus->recvSlotNIFlag &= ~r5->bmSlot;
+ r4->sub.recv.state = 70;
+ }
+ }
+ if ( gRfuStatic->recvErrorFlag )
+ r7 = gRfuStatic->recvErrorFlag | 0x700;
+ }
+ rfu_STC_REQ_callback(r9, r7);
+}
+
+void rfu_STC_PARENT_analyzeRecvPacket(void)
+{
+ u32 r3;
+ u8 r5;
+ u8 sp[4];
+ u8 *r6;
+
+ r3 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] >> 8;
+ for (r5 = 0; r5 < NELEMS(sp); ++r5)
+ {
+ sp[r5] = r3 & 0x1F;
+ r3 >>= 5;
+ if (sp[r5] == 0)
+ gRfuStatic->NIEndRecvFlag |= 1 << r5;
+ }
+ r6 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8];
+ for (r5 = 0; r5 < NELEMS(sp); ++r5)
+ {
+ if (sp[r5])
+ {
+ u8 *r4 = &sp[r5];
+
+ do
+ {
+ u8 r0 = rfu_STC_analyzeLLSF(r5, r6, *r4);
+
+ r6 += r0;
+ *r4 -= r0;
+ } while (!(*r4 & 0x80) && (*r4));
+ }
+ }
+}
+
+void rfu_STC_CHILD_analyzeRecvPacket(void)
+{
+ u16 r4;
+ u8 *r5;
+ u16 r0;
+
+ r4 = *(u16 *)&gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] & 0x7F;
+ r5 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8];
+ if (r4 == 0)
+ gRfuStatic->NIEndRecvFlag = 15;
+ do
+ {
+ if (r4 == 0)
+ break;
+ r0 = rfu_STC_analyzeLLSF(0, r5, r4);
+ r5 += r0;
+ r4 -= r0;
+ } while (!(r4 & 0x8000));
+}