summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2020-01-10 03:17:00 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2020-01-10 03:48:00 +0800
commit0ce29c0ee9e7a37089e9bea8111ef40e16d6a63e (patch)
treed0fcf6b917201b7ebf9ac1c42c0c7d8963b25e4e
parentf12c1edf3f626fd608b837c125514768f264dc2c (diff)
use constants
-rw-r--r--asm/crt0.s2
-rw-r--r--asm/librfu_intr.s28
-rw-r--r--asm/link_rfu_2.s4
-rw-r--r--common_syms/librfu_rfu.txt1
-rw-r--r--common_syms/librfu_stwi.txt1
-rw-r--r--include/librfu.h29
-rw-r--r--src/librfu_rfu.c333
-rw-r--r--src/librfu_s32id.c8
-rw-r--r--src/librfu_stwi.c292
-rw-r--r--sym_bss.txt2
-rw-r--r--sym_common.txt2
11 files changed, 355 insertions, 347 deletions
diff --git a/asm/crt0.s b/asm/crt0.s
index 28855d504..7f9626251 100644
--- a/asm/crt0.s
+++ b/asm/crt0.s
@@ -204,7 +204,7 @@ loop:
jump_intr:
strh r0, [r3, OFFSET_REG_IF - 0x200]
bic r2, r2, r0
- ldr r0, =gRfuState
+ ldr r0, =gSTWIStatus
ldr r0, [r0]
ldrb r0, [r0, 0xA]
mov r1, 0x8
diff --git a/asm/librfu_intr.s b/asm/librfu_intr.s
index 63aa88f3e..10ee02e7b 100644
--- a/asm/librfu_intr.s
+++ b/asm/librfu_intr.s
@@ -9,7 +9,7 @@
IntrSIO32: @ 81DFC50
mov r12, sp
stmdb sp!, {r11,r12,lr,pc}
- ldr r3, _081DFCB0 @ =gRfuState
+ ldr r3, _081DFCB0 @ =gSTWIStatus
ldr r0, [r3]
ldr r2, [r0]
sub r11, r12, 0x4
@@ -34,7 +34,7 @@ _081DFCA4:
ldmdb r11, {r11,sp,lr}
bx lr
.align 2, 0
-_081DFCB0: .4byte gRfuState
+_081DFCB0: .4byte gSTWIStatus
arm_func_end IntrSIO32
arm_func_start sio32intr_clock_master
@@ -45,7 +45,7 @@ sio32intr_clock_master: @ 81DFCB4
sub r11, r12, 0x4
bl STWI_set_timer_in_RAM
mov r4, 0x120
- ldr r2, _081DFF28 @ =gRfuState
+ ldr r2, _081DFF28 @ =gSTWIStatus
add r4, r4, 0x4000000
ldr lr, [r4]
ldr r12, [r2]
@@ -208,7 +208,7 @@ _081DFEFC:
bl sub_81E05A4
b _081DFF3C
.align 2, 0
-_081DFF28: .4byte gRfuState
+_081DFF28: .4byte gSTWIStatus
_081DFF2C:
add r3, r5, 0x3
strh r3, [r4]
@@ -223,7 +223,7 @@ _081DFF3C:
sio32intr_clock_slave: @ 81DFF44
mov r12, sp
stmdb sp!, {r4-r6,r11,r12,lr,pc}
- ldr r4, _081E02F0 @ =gRfuState
+ ldr r4, _081E02F0 @ =gSTWIStatus
mov r0, 0x64
ldr r3, [r4]
mov r6, 0
@@ -473,7 +473,7 @@ _081E02E0:
bhi _081E02E0
b _081E031C
.align 2, 0
-_081E02F0: .4byte gRfuState
+_081E02F0: .4byte gSTWIStatus
_081E02F4: .4byte 0x996601ee
_081E02F8:
mov r2, 0xFF00
@@ -510,7 +510,7 @@ handshake_wait: @ 81E0350
mov r1, 0x128
add r1, r1, 0x4000000
mov r0, r0, lsl 16
- ldr r2, _081E03B4 @ =gRfuState
+ ldr r2, _081E03B4 @ =gSTWIStatus
sub r11, r12, 0x4
mov lr, r0, lsr 14
ldr r12, [r2]
@@ -533,7 +533,7 @@ _081E03A0:
ldmdb r11, {r11,sp,lr}
bx lr
.align 2, 0
-_081E03B4: .4byte gRfuState
+_081E03B4: .4byte gSTWIStatus
arm_func_end handshake_wait
arm_func_start STWI_set_timer_in_RAM
@@ -544,7 +544,7 @@ STWI_set_timer_in_RAM: @ 81E03B8
add r1, r1, 0x4000000
mov r3, 0
sub r11, r12, 0x4
- ldr r12, _081E0470 @ =gRfuState
+ ldr r12, _081E0470 @ =gSTWIStatus
and lr, r0, 0xFF
ldr r2, [r12]
cmp lr, 0x50
@@ -589,7 +589,7 @@ _081E0458:
mov r3, 0x3
b _081E0488
.align 2, 0
-_081E0470: .4byte gRfuState
+_081E0470: .4byte gSTWIStatus
_081E0474:
mvn r3, 0x850
sub r3, r3, 0x2
@@ -621,7 +621,7 @@ STWI_stop_timer_in_RAM: @ 81E04C8
mov r12, sp
stmdb sp!, {r11,r12,lr,pc}
mov r1, 0x100
- ldr lr, _081E0514 @ =gRfuState
+ ldr lr, _081E0514 @ =gSTWIStatus
add r0, r1, 0x4000000
ldr r2, [lr]
sub r11, r12, 0x4
@@ -638,14 +638,14 @@ STWI_stop_timer_in_RAM: @ 81E04C8
ldmdb r11, {r11,sp,lr}
bx lr
.align 2, 0
-_081E0514: .4byte gRfuState
+_081E0514: .4byte gSTWIStatus
arm_func_end STWI_stop_timer_in_RAM
arm_func_start STWI_init_slave
STWI_init_slave: @ 81E0518
mov r12, sp
stmdb sp!, {r11,r12,lr,pc}
- ldr r0, _081E05A0 @ =gRfuState
+ ldr r0, _081E05A0 @ =gSTWIStatus
ldr r2, [r0]
mov r3, 0x5
str r3, [r2]
@@ -678,7 +678,7 @@ STWI_init_slave: @ 81E0518
ldmdb r11, {r11,sp,lr}
bx lr
.align 2, 0
-_081E05A0: .4byte gRfuState
+_081E05A0: .4byte gSTWIStatus
arm_func_end STWI_init_slave
arm_func_start sub_81E05A4
diff --git a/asm/link_rfu_2.s b/asm/link_rfu_2.s
index 2e3f89291..10d4fd03d 100644
--- a/asm/link_rfu_2.s
+++ b/asm/link_rfu_2.s
@@ -132,7 +132,7 @@ _080F86F0: .4byte 0x04000208
thumb_func_start sub_80F86F4
sub_80F86F4: @ 80F86F4
push {r4,lr}
- ldr r0, _080F8728 @ =gUnknown_3001190
+ ldr r0, _080F8728 @ =gRfuAPIBuffer
ldr r1, _080F872C @ =0x00000e64
ldr r4, _080F8730 @ =gIntrTable + 0x4
adds r2, r4, 0
@@ -155,7 +155,7 @@ _080F8722:
pop {r0}
bx r0
.align 2, 0
-_080F8728: .4byte gUnknown_3001190
+_080F8728: .4byte gRfuAPIBuffer
_080F872C: .4byte 0x00000e64
_080F8730: .4byte gIntrTable + 0x4
_080F8734: .4byte gLinkType
diff --git a/common_syms/librfu_rfu.txt b/common_syms/librfu_rfu.txt
index 94600cdf8..4b742dcd2 100644
--- a/common_syms/librfu_rfu.txt
+++ b/common_syms/librfu_rfu.txt
@@ -1,4 +1,3 @@
-gRfuState
gRfuSlotStatusUNI
gRfuSlotStatusNI
gRfuLinkStatus
diff --git a/common_syms/librfu_stwi.txt b/common_syms/librfu_stwi.txt
new file mode 100644
index 000000000..a1f773553
--- /dev/null
+++ b/common_syms/librfu_stwi.txt
@@ -0,0 +1 @@
+gSTWIStatus
diff --git a/include/librfu.h b/include/librfu.h
index 1e128d209..f5a7b4d96 100644
--- a/include/librfu.h
+++ b/include/librfu.h
@@ -137,18 +137,20 @@
// Definition Data Returned by Return Values for Library Functions
// *******************************************************
+// The function doesn't have return value.
// Value of u8 *status for rfu_REQ_pollConnectParent (Connection Trial Status)
-#define CP_STATUS_DONE 0x00 // Connection successful
-#define CP_STATUS_IN_PROCESS 0x01 // Connecting
-#define CP_STATUS_SLOT_CLOSED 0x02 // Parent device is not in connection mode with child device
-#define CP_STATUS_DISCONNECTED 0x03 // Disconnected by parent device while connecting
-#define CP_STATUS_UNKNOWN 0xff // Cannot read status due to REQ-API execution error
+// #define CP_STATUS_DONE 0x00 // Connection successful
+// #define CP_STATUS_IN_PROCESS 0x01 // Connecting
+// #define CP_STATUS_SLOT_CLOSED 0x02 // Parent device is not in connection mode with child device
+// #define CP_STATUS_DISCONNECTED 0x03 // Disconnected by parent device while connecting
+// #define CP_STATUS_UNKNOWN 0xff // Cannot read status due to REQ-API execution error
+// The function doesn't exist.
// Value of u8 *status argument for rfu_REQ_pollRecoveryConnect (Link Restore Status)
-#define RC_STATUS_DONE 0x00 // Connection restore successful
-#define RC_STATUS_FAILED 0x01 // Connection restore failure (meaningless to try anymore)
-#define RC_STATUS_SEARCHING_PARENT 0x02 // Searching for parent device
-#define RC_STATUS_UNKNOWN 0xff // Cannot read status due to REQ-API execution error
+// #define RC_STATUS_DONE 0x00 // Connection restore successful
+// #define RC_STATUS_FAILED 0x01 // Connection restore failure (meaningless to try anymore)
+// #define RC_STATUS_SEARCHING_PARENT 0x02 // Searching for parent device
+// #define RC_STATUS_UNKNOWN 0xff // Cannot read status due to REQ-API execution error
// Value of u8 *linkLossReason argument for rfu_REQBN_watchLink (Reason for Link Loss)
#define REASON_DISCONNECTED 0x00 // State of complete disconnection with rfuLL_disconnect and no possibility of restoring the link (can detect only child device)
@@ -189,6 +191,7 @@
// Error codes returned by rfu_NI_setSendData, rfu_UNI_setSendData, and rfu_NI_CHILD_setSendGameName
#define ERR_MODE 0x0300
+#define ERR_MODE_NOT_PARENT (ERR_MODE | 0x0000) // not in SDK
#define ERR_MODE_NOT_CONNECTED (ERR_MODE | 0x0001) // RFU is not in connection mode (parent or child)
#define ERR_SLOT 0x0400
@@ -215,6 +218,8 @@
// Error code during UNI-type communication (code entered into gRfuSlotStatusUNI[x]->recv.errorCode)
#define ERR_RECV_DATA_OVERWRITED (ERR_DATA_RECV | 0x0008) // Received new data when gRfuSlotStatusUNI[x]->recv.newDataFlag=1
+// not in SDK header
+#define ERR_RECV_UNK (ERR_DATA_RECV | 0x0001 | 0x0008)
// *******************************************************
// Definition Data Used by Global Variables in the Library
@@ -496,7 +501,7 @@ struct RfuS32Id
u16 unkA;
};
-struct RfuStructsBuffer
+struct RfuAPIBuffer
{
struct RfuLinkStatus linkStatus;
struct RfuStatic static_;
@@ -506,7 +511,7 @@ struct RfuStructsBuffer
struct RfuIntrStruct intr;
};
-extern struct STWIStatus *gRfuState;
+extern struct STWIStatus *gSTWIStatus;
extern struct RfuLinkStatus *gRfuLinkStatus;
extern struct RfuStatic *gRfuStatic;
extern struct RfuFixed *gRfuFixed;
@@ -522,7 +527,7 @@ s32 AgbRFU_checkID(u8);
// librfu_rfu
// API Initialization and Initial Settings
// API Initialization
-u16 rfu_initializeAPI(struct RfuStructsBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam);
+u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam);
// Set Timer Interrupt
void rfu_setTimerInterrupt(u8 timerNo, IntrFunc *timerIntrTable_p);
// Resident Function called from within a V-Blank Interrupt
diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c
index 7e4e26fad..70d5b4990 100644
--- a/src/librfu_rfu.c
+++ b/src/librfu_rfu.c
@@ -70,14 +70,13 @@ static void rfu_STC_NI_initSlot_asRecvControllData(u8, struct NIComm *);
extern const char _Str_RFU_MBOOT[];
extern const struct RfuHeader _Str_RfuHeader[2];
-struct STWIStatus *gRfuState;
-ALIGNED(8) struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX];
+struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX];
struct RfuSlotStatusNI *gRfuSlotStatusNI[RFU_CHILD_MAX];
struct RfuLinkStatus *gRfuLinkStatus;
struct RfuStatic *gRfuStatic;
struct RfuFixed *gRfuFixed;
-u16 rfu_initializeAPI(struct RfuStructsBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam)
+u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam)
{
u16 i;
u16 *dst;
@@ -86,24 +85,24 @@ u16 rfu_initializeAPI(struct RfuStructsBuffer *APIBuffer, u16 buffByteSize, Intr
// is in EWRAM?
if (((u32)APIBuffer & 0xF000000) == 0x2000000 && copyInterruptToRam)
- return 2;
+ return ERR_RFU_API_BUFF_ADR;
// is not 4-byte aligned?
if ((u32)APIBuffer & 3)
- return 2;
+ return ERR_RFU_API_BUFF_ADR;
if (copyInterruptToRam)
{
// An assert/debug print may have existed before, ie
// printf("%s %u < %u", "somefile.c:12345", buffByteSize, num)
// to push this into r3?
- r3 = 0xe64;
+ r3 = sizeof(struct RfuAPIBuffer);
if (buffByteSize < r3)
- return 1;
+ return ERR_RFU_API_BUFF_SIZE;
}
if (!copyInterruptToRam)
{
- r3 = 0x504; // same as above, this should be r3 not r0
+ r3 = 0x504; // same issue as above
if (buffByteSize < r3)
- return 1;
+ return ERR_RFU_API_BUFF_SIZE;
}
gRfuLinkStatus = &APIBuffer->linkStatus;
gRfuStatic = &APIBuffer->static_;
@@ -124,9 +123,9 @@ u16 rfu_initializeAPI(struct RfuStructsBuffer *APIBuffer, u16 buffByteSize, Intr
rfu_STC_clearAPIVariables();
for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- gRfuSlotStatusNI[i]->recvBuffer = 0;
+ gRfuSlotStatusNI[i]->recvBuffer = NULL;
gRfuSlotStatusNI[i]->recvBufferSize = 0;
- gRfuSlotStatusUNI[i]->recvBuffer = 0;
+ gRfuSlotStatusUNI[i]->recvBuffer = NULL;
gRfuSlotStatusUNI[i]->recvBufferSize = 0;
}
src = (const u16 *)((u32)&rfu_STC_fastCopy & ~1);
@@ -150,7 +149,7 @@ static void rfu_STC_clearAPIVariables(void)
CpuFill16(0, gRfuLinkStatus, sizeof(struct RfuLinkStatus));
gRfuLinkStatus->watchInterval = 4;
gRfuStatic->nowWatchInterval = 0;
- gRfuLinkStatus->parentChild = 0xFF;
+ gRfuLinkStatus->parentChild = MODE_NEUTRAL;
rfu_clearAllSlot();
gRfuStatic->SCStartFlag = 0;
for (i = 0; i < NELEMS(gRfuStatic->cidBak); ++i)
@@ -169,8 +168,8 @@ u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag)
struct RfuIntrStruct *buf;
*ackFlag = 0;
- if (gRfuLinkStatus->parentChild != 1)
- return 0x300;
+ if (gRfuLinkStatus->parentChild != MODE_PARENT)
+ return ERR_MODE_NOT_PARENT;
buf = rfu_getSTWIRecvBuffer();
switch (buf->rxPacketAlloc.rfuPacket8.data[0])
{
@@ -182,7 +181,7 @@ u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag)
*ackFlag = buf->rxPacketAlloc.rfuPacket8.data[4];
return 0;
default:
- return 0x10;
+ return ERR_REQ_CMD_ID;
}
}
@@ -233,10 +232,10 @@ static void rfu_CB_defaultCallback(u8 r0, u16 reqResult)
if (gRfuStatic->flags & 8)
gRfuFixed->reqCallback(r0, reqResult);
r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
- for (i = 0; i < 4; ++i)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
if ((r5 >> i) & 1)
rfu_STC_removeLinkData(i, 1);
- gRfuLinkStatus->parentChild = 0xFF;
+ gRfuLinkStatus->parentChild = MODE_NEUTRAL;
}
}
@@ -255,7 +254,7 @@ void rfu_REQ_RFUStatus(void)
u16 rfu_getRFUStatus(u8 *rfuState)
{
if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] != 0x93)
- return 0x10;
+ return ERR_REQ_CMD_ID;
if (STWI_poll_CommandEnd() == 0)
*rfuState = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7];
else
@@ -292,7 +291,7 @@ void rfu_REQ_stopMode(void)
if (REG_IME == 0)
{
rfu_STC_REQ_callback(61, 6);
- gRfuState->error = 6;
+ gSTWIStatus->error = ERR_REQ_CMD_IME_DISABLE;
}
else
{
@@ -300,7 +299,7 @@ void rfu_REQ_stopMode(void)
rfu_STC_clearAPIVariables();
if (AgbRFU_checkID(8) == 0x8001)
{
- timerReg = &REG_TMCNT(gRfuState->timerSelect);
+ timerReg = &REG_TMCNT(gSTWIStatus->timerSelect);
*timerReg = 0;
*timerReg = (TIMER_ENABLE | TIMER_1024CLK) << 16;
while (*timerReg << 16 < 262 << 16)
@@ -326,10 +325,10 @@ static void rfu_CB_stopMode(u8 a1, u16 reqResult)
u32 rfu_REQBN_softReset_and_checkID(void)
{
- s32 r2;
+ u32 r2;
if (REG_IME == 0)
- return -1;
+ return ERR_ID_CHECK_IME_DISABLE;
AgbRFU_SoftReset();
rfu_STC_clearAPIVariables();
if ((r2 = AgbRFU_checkID(30)) == 0)
@@ -353,7 +352,7 @@ static void rfu_CB_reset(u8 a1, u16 reqResult)
void rfu_REQ_configSystem(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer)
{
STWI_set_Callback_M(rfu_STC_REQ_callback);
- STWI_send_SystemConfigREQ((availSlotFlag & 3) | 0x3C, maxMFrame, mcTimer);
+ STWI_send_SystemConfigREQ((availSlotFlag & AVAIL_SLOT1) | 0x3C, maxMFrame, mcTimer);
if (mcTimer == 0)
{
gRfuStatic->unk_1a = 1;
@@ -405,7 +404,7 @@ static void rfu_CB_configGameData(u8 ip, u16 r7)
if (r7 == 0)
{
- r1 = gRfuState->txPacket->rfuPacket8.data;
+ r1 = gSTWIStatus->txPacket->rfuPacket8.data;
r2 = gRfuLinkStatus->my.serialNo = r1[4];
gRfuLinkStatus->my.serialNo = (r1[5] << 8) | r2;
r4 = &r1[6];
@@ -500,7 +499,7 @@ static void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult)
}
else if (r4 == 27)
{
- if (gRfuLinkStatus->parentChild == 255)
+ if (gRfuLinkStatus->parentChild == MODE_NEUTRAL)
gRfuLinkStatus->my.id = 0;
gRfuStatic->SCStartFlag = 0;
}
@@ -534,7 +533,7 @@ static void rfu_STC_readChildList(void)
r4 += 4)
{
r2 = r4[2];
- if (r2 < 4 && !((gRfuLinkStatus->connSlotFlag >> r2) & 1) && !((gRfuLinkStatus->linkLossSlotFlag >> r2) & 1))
+ if (r2 < RFU_CHILD_MAX && !((gRfuLinkStatus->connSlotFlag >> r2) & 1) && !((gRfuLinkStatus->linkLossSlotFlag >> r2) & 1))
{
if (sp[r2] != 0)
++gRfuStatic->lsFixedCount[r2];
@@ -546,7 +545,7 @@ static void rfu_STC_readChildList(void)
++gRfuLinkStatus->connCount;
gRfuLinkStatus->partner[r2].id = *(u16 *)r4;
gRfuLinkStatus->partner[r2].slot = r2;
- gRfuLinkStatus->parentChild = 1;
+ gRfuLinkStatus->parentChild = MODE_PARENT;
gRfuStatic->flags &= 0x7F;
gRfuStatic->cidBak[r2] = gRfuLinkStatus->partner[r2].id;
}
@@ -682,7 +681,7 @@ static void rfu_CB_pollConnectParent(u8 sp24, u16 sp28)
gRfuLinkStatus->linkLossSlotFlag &= ~r2;
gRfuLinkStatus->my.id = id;
++gRfuLinkStatus->connCount;
- gRfuLinkStatus->parentChild = 0;
+ gRfuLinkStatus->parentChild = MODE_CHILD;
gRfuStatic->flags |= 0x80;
for (r5 = 0; r5 < RFU_CHILD_MAX; ++r5)
{
@@ -702,7 +701,7 @@ static void rfu_CB_pollConnectParent(u8 sp24, u16 sp28)
break;
}
}
- if (r5 < 4)
+ if (r5 < RFU_CHILD_MAX)
{
CpuCopy16(r9, &gRfuLinkStatus->partner[slot], sizeof(struct RfuTgtData));
gRfuLinkStatus->partner[slot].slot = slot;
@@ -727,7 +726,7 @@ u16 rfu_getConnectParentStatus(u8 *status, u8 *connectSlotNo)
*status = r2[1];
return 0;
}
- return 0x10;
+ return ERR_REQ_CMD_ID;
}
void rfu_REQ_endConnectParent(void)
@@ -744,7 +743,7 @@ u16 rfu_syncVBlank(void)
s32 r5;
rfu_NI_checkCommFailCounter();
- if (gRfuLinkStatus->parentChild == 0xFF)
+ if (gRfuLinkStatus->parentChild == MODE_NEUTRAL)
return 0;
if (gRfuStatic->nowWatchInterval != 0)
--gRfuStatic->nowWatchInterval;
@@ -771,10 +770,10 @@ u16 rfu_syncVBlank(void)
{
gRfuStatic->flags &= 0xFB;
r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
- for (r4 = 0; r4 < 4; ++r4)
+ for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4)
if ((r5 >> r4) & 1)
rfu_STC_removeLinkData(r4, 1);
- gRfuLinkStatus->parentChild = 0xFF;
+ gRfuLinkStatus->parentChild = MODE_NEUTRAL;
return 1;
}
--gRfuStatic->watchdogTimer;
@@ -791,9 +790,9 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
u8 r9, r6, r3, connSlotFlag, r0;
*bmLinkLossSlot = 0;
- *linkLossReason = 0;
+ *linkLossReason = REASON_DISCONNECTED;
*parentBmLinkRecoverySlot = 0;
- if (gRfuLinkStatus->parentChild == 0xFF || gRfuState->msMode == 0)
+ if (gRfuLinkStatus->parentChild == MODE_NEUTRAL || gSTWIStatus->msMode == 0)
return 0;
if (gRfuStatic->flags & 4)
gRfuStatic->watchdogTimer = 360;
@@ -808,7 +807,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
*bmLinkLossSlot = r1[4];
*linkLossReason = r1[5];
- if (*linkLossReason == 1)
+ if (*linkLossReason == REASON_LINK_LOSS)
*bmLinkLossSlot = gRfuLinkStatus->connSlotFlag;
sp08 = 2;
}
@@ -819,7 +818,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
r6 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[5];
r6 ^= gRfuLinkStatus->connSlotFlag;
*bmLinkLossSlot = r6 & gRfuLinkStatus->connSlotFlag;
- *linkLossReason = 1;
+ *linkLossReason = REASON_LINK_LOSS;
for (i = 0; i < RFU_CHILD_MAX; ++i)
{
if ((*bmLinkLossSlot >> i) & 1)
@@ -850,7 +849,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
rfu_STC_REQ_callback(17, sp0C);
return sp0C;
}
- for (; i < 4; ++i)
+ for (; i < RFU_CHILD_MAX; ++i)
{
r6 = 1 << i;
if (sp0C == 0)
@@ -859,13 +858,13 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
{
if (gRfuLinkStatus->strength[i] == 0)
{
- if (gRfuLinkStatus->parentChild == 1)
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
{
++gRfuStatic->linkEmergencyFlag[i];
if (gRfuStatic->linkEmergencyFlag[i] > 3)
{
*bmLinkLossSlot |= r6;
- *linkLossReason = sp08; // why not directly use 1?
+ *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS?
}
}
else
@@ -876,7 +875,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0)
{
*bmLinkLossSlot |= r6;
- *linkLossReason = sp08;
+ *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS?
}
else
{
@@ -886,7 +885,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
STWI_send_DisconnectREQ(gRfuLinkStatus->connSlotFlag);
STWI_poll_CommandEnd();
*bmLinkLossSlot |= r6;
- *linkLossReason = sp08; // why not directly use 1?
+ *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS?
}
}
}
@@ -897,7 +896,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
gRfuStatic->linkEmergencyFlag[i] = sp0C; // why not directly use 0?
}
}
- if (gRfuLinkStatus->parentChild == 1 && gRfuLinkStatus->strength[i] != 0)
+ if (gRfuLinkStatus->parentChild == MODE_PARENT && gRfuLinkStatus->strength[i] != 0)
{
if (r6 & gRfuLinkStatus->linkLossSlotFlag)
{
@@ -964,7 +963,7 @@ static void rfu_STC_removeLinkData(u8 r7, u8 r12)
gRfuLinkStatus->connSlotFlag &= r6 = ~r5;
gRfuLinkStatus->linkLossSlotFlag |= r5;
if ((*(u32 *)gRfuLinkStatus & 0xFF00FF) == 0)
- gRfuLinkStatus->parentChild = 0xFF;
+ gRfuLinkStatus->parentChild = MODE_NEUTRAL;
if (r12 != 0)
{
CpuFill16(0, &gRfuLinkStatus->partner[r7], sizeof(struct RfuTgtData));
@@ -981,7 +980,7 @@ void rfu_REQ_disconnect(u8 bmDisconnectSlot)
if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & bmDisconnectSlot)
{
gRfuStatic->recoveryBmSlot = bmDisconnectSlot;
- if (gRfuLinkStatus->parentChild == 0xFF && gRfuStatic->flags & 0x80)
+ if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && gRfuStatic->flags & 0x80)
{
if (gRfuLinkStatus->linkLossSlotFlag & bmDisconnectSlot)
rfu_CB_disconnect(48, 0);
@@ -1005,7 +1004,7 @@ static void rfu_CB_disconnect(u8 r6, u16 r5)
{
u8 r4, r0;
- if (r5 == 3 && gRfuLinkStatus->parentChild == 0)
+ if (r5 == 3 && gRfuLinkStatus->parentChild == MODE_CHILD)
{
STWI_set_Callback_M(rfu_CB_defaultCallback);
STWI_send_SystemStatusREQ();
@@ -1016,7 +1015,7 @@ static void rfu_CB_disconnect(u8 r6, u16 r5)
gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8] = gRfuStatic->recoveryBmSlot;
if (r5 == 0)
{
- for (r4 = 0; r4 < 4; ++r4)
+ for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4)
{
r0 = 1 << r4;
if (r0 & gRfuStatic->recoveryBmSlot)
@@ -1024,7 +1023,7 @@ static void rfu_CB_disconnect(u8 r6, u16 r5)
}
}
if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) == 0)
- gRfuLinkStatus->parentChild = 0xFF;
+ gRfuLinkStatus->parentChild = MODE_NEUTRAL;
rfu_STC_REQ_callback(r6, r5);
if (gRfuStatic->SCStartFlag)
{
@@ -1041,7 +1040,7 @@ void rfu_REQ_CHILD_startConnectRecovery(u8 bmRecoverySlot)
u8 i;
gRfuStatic->recoveryBmSlot = bmRecoverySlot;
- for (i = 0; i < 4 && !((bmRecoverySlot >> i) & 1); ++i)
+ for (i = 0; i < RFU_CHILD_MAX && !((bmRecoverySlot >> i) & 1); ++i)
;
STWI_set_Callback_M(rfu_STC_REQ_callback);
// if i == 4, gRfuLinkStatus->partner[i].id becomes gRfuLinkStatus->my.id
@@ -1061,7 +1060,7 @@ static void rfu_CB_CHILD_pollConnectRecovery(u8 r8, u16 r7)
if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] == 0 && gRfuStatic->recoveryBmSlot)
{
- gRfuLinkStatus->parentChild = 0;
+ gRfuLinkStatus->parentChild = MODE_CHILD;
for (r4 = 0; r4 < NELEMS(gRfuStatic->linkEmergencyFlag); ++r4)
{
r3 = 1 << r4;
@@ -1090,7 +1089,7 @@ u16 rfu_CHILD_getConnectRecoveryStatus(u8 *status)
*status = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
return 0;
}
- return 0x10;
+ return ERR_REQ_CMD_ID;
}
void rfu_REQ_CHILD_endConnectRecovery(void)
@@ -1126,19 +1125,19 @@ void rfu_REQ_changeMasterSlave(void)
bool8 rfu_getMasterSlave(void)
{
- bool8 r2 = STWI_read_status(1);
+ bool8 masterSlave = STWI_read_status(1);
- if (r2 == 1)
+ if (masterSlave == AGB_CLK_MASTER)
{
- if (gRfuState->unk_2c)
+ if (gSTWIStatus->unk_2c)
{
- if (gRfuState->reqActiveCommand == 39
- || gRfuState->reqActiveCommand == 37
- || gRfuState->reqActiveCommand == 55)
- r2 = 0;
+ if (gSTWIStatus->reqActiveCommand == 39
+ || gSTWIStatus->reqActiveCommand == 37
+ || gSTWIStatus->reqActiveCommand == 55)
+ masterSlave = AGB_CLK_SLAVE;
}
}
- return r2;
+ return masterSlave;
}
void rfu_clearAllSlot(void)
@@ -1153,7 +1152,7 @@ void rfu_clearAllSlot(void)
CpuFill16(0, gRfuSlotStatusUNI[i], sizeof(struct UNISend) + sizeof(struct UNIRecv));
gRfuLinkStatus->remainLLFrameSizeChild[i] = 16;
}
- gRfuLinkStatus->remainLLFrameSizeParent = 87;
+ gRfuLinkStatus->remainLLFrameSizeParent = LLF_P_SIZE;
gRfuLinkStatus->sendSlotNIFlag = 0;
gRfuLinkStatus->recvSlotNIFlag = 0;
gRfuLinkStatus->sendSlotUNIFlag = 0;
@@ -1184,19 +1183,19 @@ u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex)
struct NIComm *r4;
if (slotStatusIndex >= RFU_CHILD_MAX)
- return 0x400;
- if ((connTypeFlag & 0xF) == 0)
- return 0x600;
+ return ERR_SLOT_NO;
+ if (!(connTypeFlag & (TYPE_UNI_SEND | TYPE_UNI_RECV | TYPE_NI_SEND | TYPE_NI_RECV)))
+ return ERR_COMM_TYPE;
r10 = REG_IME;
REG_IME = 0;
- if (connTypeFlag & 0xC)
+ if (connTypeFlag & (TYPE_NI_SEND | TYPE_NI_RECV))
{
for (r3 = 0; r3 < 2; ++r3)
{
r4 = NULL;
if (r3 == 0)
{
- if (connTypeFlag & 4)
+ if (connTypeFlag & TYPE_NI_SEND)
{
r4 = &gRfuSlotStatusNI[slotStatusIndex]->send;
gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlotOrg;
@@ -1204,7 +1203,7 @@ u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex)
}
else
{
- if (connTypeFlag & 8)
+ if (connTypeFlag & TYPE_NI_RECV)
{
r4 = &gRfuSlotStatusNI[slotStatusIndex]->recv;
gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex);
@@ -1212,10 +1211,10 @@ u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex)
}
if (r4 != NULL)
{
- if (r4->state & 0x8000)
+ if (r4->state & SLOT_BUSY_FLAG)
{
rfu_STC_releaseFrame(slotStatusIndex, r3, r4);
- for (r1 = 0; r1 < 4; ++r1)
+ for (r1 = 0; r1 < RFU_CHILD_MAX; ++r1)
if ((r4->bmSlotOrg >> r1) & 1)
r4->failCounter = 0;
}
@@ -1223,11 +1222,11 @@ u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex)
}
}
}
- if (connTypeFlag & 1)
+ if (connTypeFlag & TYPE_UNI_SEND)
{
struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[slotStatusIndex];
- if (r3->send.state & 0x8000)
+ if (r3->send.state & SLOT_BUSY_FLAG)
{
if (!(gRfuStatic->flags & 0x80))
gRfuLinkStatus->remainLLFrameSizeParent += 3 + (u8)r3->send.payloadSize;
@@ -1237,7 +1236,7 @@ u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex)
}
CpuFill16(0, &r3->send, sizeof(struct UNISend));
}
- if (connTypeFlag & 2)
+ if (connTypeFlag & TYPE_UNI_RECV)
{
CpuFill16(0, &gRfuSlotStatusUNI[slotStatusIndex]->recv, sizeof(struct UNIRecv));
}
@@ -1248,15 +1247,15 @@ u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex)
u16 rfu_setRecvBuffer(u8 connType, u8 slotNo, void *buffer, u32 buffSize)
{
if (slotNo >= RFU_CHILD_MAX)
- return 0x400;
- if (connType & 0x20)
+ return ERR_SLOT_NO;
+ if (connType & TYPE_NI)
{
gRfuSlotStatusNI[slotNo]->recvBuffer = buffer;
gRfuSlotStatusNI[slotNo]->recvBufferSize = buffSize;
}
- else if (!(connType & 0x10))
+ else if (!(connType & TYPE_UNI))
{
- return 0x600;
+ return ERR_COMM_TYPE;
}
else
{
@@ -1275,7 +1274,7 @@ u16 rfu_UNI_setSendData(u8 bmSendSlot, const void *src, u8 size)
{
u8 subFrameSize;
- if (gRfuLinkStatus->parentChild == 1)
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
subFrameSize = size + 3;
else
subFrameSize = size + 2;
@@ -1298,27 +1297,27 @@ static u16 rfu_STC_setSendData_org(u8 r6, u8 bmSendSlot, u8 subFrameSize, const
struct RfuSlotStatusUNI *r1;
struct RfuSlotStatusNI *r12;
- if (gRfuLinkStatus->parentChild == 0xFF)
- return 0x301;
+ if (gRfuLinkStatus->parentChild == MODE_NEUTRAL)
+ return ERR_MODE_NOT_CONNECTED;
if (!(bmSendSlot & 0xF))
- return 0x400;
+ return ERR_SLOT_NO;
if (((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & bmSendSlot) != bmSendSlot)
- return 0x401;
+ return ERR_SLOT_NOT_CONNECTED;
if (r6 & 0x10)
r0 = gRfuLinkStatus->sendSlotUNIFlag;
else
r0 = gRfuLinkStatus->sendSlotNIFlag;
if (r0 & bmSendSlot)
- return 0x402;
- for (r2 = 0; r2 < 4 && !((bmSendSlot >> r2) & 1); ++r2)
+ return ERR_SLOT_BUSY;
+ for (r2 = 0; r2 < RFU_CHILD_MAX && !((bmSendSlot >> r2) & 1); ++r2)
;
- if (gRfuLinkStatus->parentChild == 1)
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
r9 = &gRfuLinkStatus->remainLLFrameSizeParent;
- else if (gRfuLinkStatus->parentChild == 0)
+ else if (gRfuLinkStatus->parentChild == MODE_CHILD)
r9 = &gRfuLinkStatus->remainLLFrameSizeChild[r2];
r4 = _Str_RfuHeader[gRfuLinkStatus->parentChild].unk00;
if (subFrameSize > *r9 || subFrameSize <= r4)
- return 0x500;
+ return ERR_SUBFRAME_SIZE;
sp04 = REG_IME;
REG_IME = 0;
r5 = r6 & 0x20;
@@ -1355,7 +1354,7 @@ static u16 rfu_STC_setSendData_org(u8 r6, u8 bmSendSlot, u8 subFrameSize, const
gRfuSlotStatusNI[r2]->send.failCounter = 0;
gRfuLinkStatus->sendSlotNIFlag |= bmSendSlot;
*r9 -= subFrameSize;
- r12->send.state = 0x8021;
+ r12->send.state = SLOT_STATE_SEND_START;
}
else if (r6 & 0x10)
{
@@ -1364,7 +1363,7 @@ static u16 rfu_STC_setSendData_org(u8 r6, u8 bmSendSlot, u8 subFrameSize, const
r1->send.src = src;
r1->send.payloadSize = subFrameSize - r4;
*r9 -= subFrameSize;
- r1->send.state = 0x8024;
+ r1->send.state = SLOT_STATE_SEND_UNI;
gRfuLinkStatus->sendSlotUNIFlag |= bmSendSlot;
}
REG_IME = sp04;
@@ -1378,12 +1377,12 @@ u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot)
u8 r2;
if (slotStatusIndex >= RFU_CHILD_MAX)
- return 0x400;
+ return ERR_SLOT_NO;
if (connType == 0x20)
{
r5 = gRfuSlotStatusNI[slotStatusIndex];
- if ((r5->send.state & 0x8000)
- && (r5->send.state & 0x20))
+ if ((r5->send.state & SLOT_BUSY_FLAG)
+ && (r5->send.state & SLOT_SEND_FLAG))
{
connType = bmNewTgtSlot ^ r5->send.bmSlot;
@@ -1403,19 +1402,19 @@ u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot)
if (r5->send.bmSlot == 0)
{
rfu_STC_releaseFrame(slotStatusIndex, 0, &r5->send);
- r5->send.state = 39;
+ r5->send.state = SLOT_STATE_SEND_FAILED;
}
REG_IME = r8;
}
}
else
{
- return 0x404;
+ return ERR_SLOT_TARGET;
}
}
else
{
- return 0x403;
+ return ERR_SLOT_NOT_SENDING;
}
}
else
@@ -1424,13 +1423,13 @@ u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot)
{
s32 r3;
- if (gRfuSlotStatusUNI[slotStatusIndex]->send.state != 0x8024)
- return 0x403;
+ if (gRfuSlotStatusUNI[slotStatusIndex]->send.state != SLOT_STATE_SEND_UNI)
+ return ERR_SLOT_NOT_SENDING;
for (r3 = 0, r2 = 0; r2 < RFU_CHILD_MAX; ++r2)
if (r2 != slotStatusIndex)
r3 |= gRfuSlotStatusUNI[r2]->send.bmSlot;
if (bmNewTgtSlot & r3)
- return 0x404;
+ return ERR_SLOT_TARGET;
r8 = REG_IME;
REG_IME = 0;
gRfuLinkStatus->sendSlotUNIFlag &= ~gRfuSlotStatusUNI[slotStatusIndex]->send.bmSlot;
@@ -1440,7 +1439,7 @@ u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot)
}
else
{
- return 0x600;
+ return ERR_COMM_TYPE;
}
}
return 0;
@@ -1451,18 +1450,18 @@ u16 rfu_NI_stopReceivingData(u8 slotStatusIndex)
struct NIComm *r5;
u16 r4, r1;
- if (slotStatusIndex > 3)
- return 0x400;
+ if (slotStatusIndex >= RFU_CHILD_MAX)
+ return ERR_SLOT_NO;
r5 = &gRfuSlotStatusNI[slotStatusIndex]->recv;
r4 = REG_IME;
++r4; --r4; // fix r4, r5 register swap
REG_IME = 0;
- if (gRfuSlotStatusNI[slotStatusIndex]->recv.state & 0x8000)
+ if (gRfuSlotStatusNI[slotStatusIndex]->recv.state & SLOT_BUSY_FLAG)
{
- if (gRfuSlotStatusNI[slotStatusIndex]->recv.state == 0x8043)
- gRfuSlotStatusNI[slotStatusIndex]->recv.state = 72;
+ if (gRfuSlotStatusNI[slotStatusIndex]->recv.state == SLOT_STATE_RECV_LAST)
+ gRfuSlotStatusNI[slotStatusIndex]->recv.state = SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN;
else
- gRfuSlotStatusNI[slotStatusIndex]->recv.state = 71;
+ gRfuSlotStatusNI[slotStatusIndex]->recv.state = SLOT_STATE_RECV_FAILED;
gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex);
rfu_STC_releaseFrame(slotStatusIndex, 1, r5);
}
@@ -1478,11 +1477,11 @@ u16 rfu_UNI_changeAndReadySendData(u8 slotStatusIndex, const void *src, u8 size)
u8 r3_;
if (slotStatusIndex >= RFU_CHILD_MAX)
- return 0x400;
+ return ERR_SLOT_NO;
r4 = &gRfuSlotStatusUNI[slotStatusIndex]->send;
- if (r4->state != 0x8024)
- return 0x403;
- if (gRfuLinkStatus->parentChild == 1)
+ if (r4->state != SLOT_STATE_SEND_UNI)
+ return ERR_SLOT_NOT_SENDING;
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
{
r6 = &gRfuLinkStatus->remainLLFrameSizeParent;
r3_ = gRfuLinkStatus->remainLLFrameSizeParent + (u8)r4->payloadSize;
@@ -1493,7 +1492,7 @@ u16 rfu_UNI_changeAndReadySendData(u8 slotStatusIndex, const void *src, u8 size)
r3_ = gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] + (u8)r4->payloadSize;
}
if (r3_ < size)
- return 0x500;
+ return ERR_SUBFRAME_SIZE;
r1 = REG_IME;
REG_IME = 0;
r4->src = src;
@@ -1508,7 +1507,7 @@ void rfu_UNI_readySendData(u8 slotStatusIndex)
{
if (slotStatusIndex < RFU_CHILD_MAX)
{
- if (gRfuSlotStatusUNI[slotStatusIndex]->send.state == 0x8024)
+ if (gRfuSlotStatusUNI[slotStatusIndex]->send.state == SLOT_STATE_SEND_UNI)
gRfuSlotStatusUNI[slotStatusIndex]->send.dataReadyFlag = 1;
}
}
@@ -1521,7 +1520,7 @@ void rfu_UNI_clearRecvNewDataFlag(u8 slotStatusIndex)
void rfu_REQ_sendData(u8 clockChangeFlag)
{
- if (gRfuLinkStatus->parentChild != 0xFF)
+ if (gRfuLinkStatus->parentChild != MODE_NEUTRAL)
{
if (gRfuLinkStatus->parentChild == 1
&& !(gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag))
@@ -1565,10 +1564,10 @@ void rfu_REQ_sendData(u8 clockChangeFlag)
}
if (clockChangeFlag != 0)
{
- if (gRfuLinkStatus->parentChild == 1)
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
{
- if (gRfuState->callbackS != NULL)
- gRfuState->callbackS(39);
+ if (gSTWIStatus->callbackS != NULL)
+ gSTWIStatus->callbackS(39);
}
else
{
@@ -1591,13 +1590,13 @@ static void rfu_CB_sendData(UNUSED u8 r0, u16 r7)
if (gRfuSlotStatusUNI[r6]->send.dataReadyFlag)
gRfuSlotStatusUNI[r6]->send.dataReadyFlag = 0;
r4 = &gRfuSlotStatusNI[r6]->send;
- if (r4->state == 0x8020)
+ if (r4->state == SLOT_STATE_SEND_NULL)
{
rfu_STC_releaseFrame(r6, 0, r4);
gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlot;
if (r4->dataType == 1)
gRfuLinkStatus->getNameFlag |= 1 << r6;
- r4->state = 38;
+ r4->state = SLOT_STATE_SEND_SUCCESS;
}
}
}
@@ -1625,7 +1624,7 @@ static void rfu_constructSendLLFrame(void)
u8 *sp00;
struct RfuSlotStatusNI *r2;
- if (gRfuLinkStatus->parentChild != 0xFF
+ if (gRfuLinkStatus->parentChild != MODE_NEUTRAL
&& gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag)
{
gRfuLinkStatus->LLFReadyFlag = 0;
@@ -1634,15 +1633,15 @@ static void rfu_constructSendLLFrame(void)
for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6)
{
r5 = 0;
- if (gRfuSlotStatusNI[r6]->send.state & 0x8000)
+ if (gRfuSlotStatusNI[r6]->send.state & SLOT_BUSY_FLAG)
r5 = rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->send);
- if (gRfuSlotStatusNI[r6]->recv.state & 0x8000)
+ if (gRfuSlotStatusNI[r6]->recv.state & SLOT_BUSY_FLAG)
r5 += rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->recv);
- if (gRfuSlotStatusUNI[r6]->send.state == 0x8024)
+ if (gRfuSlotStatusUNI[r6]->send.state == SLOT_STATE_SEND_UNI)
r5 += rfu_STC_UNI_constructLLSF(r6, &sp00);
if (r5 != 0)
{
- if (gRfuLinkStatus->parentChild == 1)
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
r8 += r5;
else
r8 |= r5 << (5 * r6 + 8);
@@ -1653,7 +1652,7 @@ static void rfu_constructSendLLFrame(void)
while ((u32)sp00 & 3)
*sp00++ = 0;
gRfuFixed->LLFBuffer[0] = r8;
- if (gRfuLinkStatus->parentChild == 0)
+ if (gRfuLinkStatus->parentChild == MODE_CHILD)
{
u8 *r0 = sp00 - offsetof(struct RfuFixed, LLFBuffer[1]);
@@ -1675,7 +1674,7 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4)
u8 *r2;
const struct RfuHeader *r8 = &_Str_RfuHeader[gRfuLinkStatus->parentChild];
- if (r4->state == 0x8022)
+ if (r4->state == SLOT_STATE_SENDING)
{
while (r4->now_p[r4->phase] >= (const u8 *)r4->src + r4->dataSize)
{
@@ -1684,11 +1683,11 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4)
r4->phase = 0;
}
}
- if (r4->state & 0x40)
+ if (r4->state & SLOT_RECV_FLAG)
{
r5 = 0;
}
- else if (r4->state == 0x8022)
+ else if (r4->state == SLOT_STATE_SENDING)
{
if (r4->now_p[r4->phase] + r4->payloadSize > (const u8 *)r4->src + r4->dataSize)
r5 = (const u8 *)r4->src + r4->dataSize - r4->now_p[r4->phase];
@@ -1707,7 +1706,7 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4)
| r4->phase << r8->unk05
| r4->n[r4->phase] << r8->unk06
| r5;
- if (gRfuLinkStatus->parentChild == 1)
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
sp00 |= r4->bmSlot << 18;
r2 = (u8 *)&sp00;
for (i = 0; i < r8->unk00; ++i)
@@ -1718,13 +1717,13 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4)
gRfuFixed->fastCopyPtr(&sp04, r12, r5);
}
- if (r4->state == 0x8022)
+ if (r4->state == SLOT_STATE_SENDING)
{
++r4->phase;
if (r4->phase == 4)
r4->phase = 0;
}
- if (gRfuLinkStatus->parentChild == 1)
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
gRfuLinkStatus->LLFReadyFlag = 1;
else
gRfuLinkStatus->LLFReadyFlag |= 1 << r10;
@@ -1745,14 +1744,14 @@ static u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6)
r5 = &_Str_RfuHeader[gRfuLinkStatus->parentChild];
sp00 = (r4->state & 0xF) << r5->unk03
| r4->payloadSize;
- if (gRfuLinkStatus->parentChild == 1)
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
sp00 |= r4->bmSlot << 18;
r2 = (u8 *)&sp00;
for (i = 0; i < r5->unk00; ++i)
*(*r6)++ = *r2++;
sp04 = r4->src;
gRfuFixed->fastCopyPtr(&sp04, r6, r4->payloadSize);
- if (gRfuLinkStatus->parentChild == 1)
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
gRfuLinkStatus->LLFReadyFlag = 16;
else
gRfuLinkStatus->LLFReadyFlag |= 16 << r8;
@@ -1761,7 +1760,7 @@ static u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6)
void rfu_REQ_recvData(void)
{
- if (gRfuLinkStatus->parentChild != 0xFF)
+ if (gRfuLinkStatus->parentChild != MODE_NEUTRAL)
{
gRfuStatic->commExistFlag = gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag;
gRfuStatic->recvErrorFlag = 0;
@@ -1779,25 +1778,25 @@ static void rfu_CB_recvData(u8 r9, u16 r7)
if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1])
{
gRfuStatic->NIEndRecvFlag = 0;
- if (gRfuLinkStatus->parentChild == 1)
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
rfu_STC_PARENT_analyzeRecvPacket();
else
rfu_STC_CHILD_analyzeRecvPacket();
for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6)
{
r4 = gRfuSlotStatusNI[r6];
- if (r4->recv.state == 0x8043 && !((gRfuStatic->NIEndRecvFlag >> r6) & 1))
+ if (r4->recv.state == SLOT_STATE_RECV_LAST && !((gRfuStatic->NIEndRecvFlag >> r6) & 1))
{
r5 = &r4->recv;
if (r5->dataType == 1)
gRfuLinkStatus->getNameFlag |= 1 << r6;
rfu_STC_releaseFrame(r6, 1, r5);
gRfuLinkStatus->recvSlotNIFlag &= ~r5->bmSlot;
- r4->recv.state = 70;
+ r4->recv.state = SLOT_STATE_RECV_SUCCESS;
}
}
if (gRfuStatic->recvErrorFlag)
- r7 = gRfuStatic->recvErrorFlag | 0x700;
+ r7 = gRfuStatic->recvErrorFlag | ERR_DATA_RECV;
}
rfu_STC_REQ_callback(r9, r7);
}
@@ -1864,7 +1863,7 @@ static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3)
u32 r0;
u16 r10;
- r6 = &_Str_RfuHeader[~gRfuLinkStatus->parentChild & 1];
+ r6 = &_Str_RfuHeader[~gRfuLinkStatus->parentChild & (MODE_NEUTRAL & MODE_PARENT)];
if (r3 < r6->unk00)
return r3;
r5 = 0;
@@ -1880,7 +1879,7 @@ static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3)
r10 = sp00.unk06 + r6->unk00;
if (sp00.unk00 == 0)
{
- if (gRfuLinkStatus->parentChild == 1)
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
{
if ((gRfuLinkStatus->connSlotFlag >> r12) & 1)
{
@@ -1909,7 +1908,7 @@ static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3)
if (r5)
{
- for (r4 = 0; r4 < 4; ++r4)
+ for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4)
{
if ((r5 >> r4) & 1)
{
@@ -1937,8 +1936,8 @@ static void rfu_STC_UNI_receive(u8 r7, const struct RfuLocalStruct *r6, const u8
r5->errorCode = 0;
if (gRfuSlotStatusUNI[r7]->recvBufferSize < r6->unk06)
{
- r3->recv.state = 73;
- r5->errorCode = 0x701;
+ r3->recv.state = SLOT_STATE_RECV_IGNORE;
+ r5->errorCode = ERR_RECV_BUFF_OVER;
}
else
{
@@ -1946,16 +1945,16 @@ static void rfu_STC_UNI_receive(u8 r7, const struct RfuLocalStruct *r6, const u8
{
if (r5->newDataFlag)
{
- r5->errorCode = 0x709;
+ r5->errorCode = ERR_RECV_UNK;
goto _081E2F0E;
}
}
else
{
if (r5->newDataFlag)
- r5->errorCode = 0x708;
+ r5->errorCode = ERR_RECV_DATA_OVERWRITED;
}
- r5->state = 0x8042;
+ r5->state = SLOT_STATE_RECEIVING;
r2 = r5->dataSize = r6->unk06;
sp04 = gRfuSlotStatusUNI[r7]->recvBuffer;
gRfuFixed->fastCopyPtr(&sp00, &sp04, r2);
@@ -1976,9 +1975,9 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct
u8 r4;
u16 r2;
- if ((r6->unk02 == 2 && r9 == 0x8022)
- || (r6->unk02 == 1 && r9 == 0x8021)
- || (r6->unk02 == 3 && r9 == 0x8023))
+ if ((r6->unk02 == 2 && r9 == SLOT_STATE_SENDING)
+ || (r6->unk02 == 1 && r9 == SLOT_STATE_SEND_START)
+ || (r6->unk02 == 3 && r9 == SLOT_STATE_SEND_LAST))
{
if (r12->n[r6->unk04] == r6->unk05)
r12->recvAckFlag[r6->unk04] |= 1 << r10;
@@ -1987,9 +1986,9 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct
{
r12->n[r6->unk04] = (r12->n[r6->unk04] + 1) & 3;
r12->recvAckFlag[r6->unk04] = 0;
- if ((u16)(r12->state + ~0x8020) <= 1)
+ if ((u16)(r12->state + ~SLOT_STATE_SEND_NULL) <= 1)
{
- if (r12->state == 0x8021)
+ if (r12->state == SLOT_STATE_SEND_START)
r12->now_p[r6->unk04] += r12->payloadSize;
else
r12->now_p[r6->unk04] += r12->payloadSize << 2;
@@ -2003,7 +2002,7 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct
// if (r12->remainSize == 0 || r12->remainSize < 0)
{
r12->phase = 0;
- if (r12->state == 0x8021)
+ if (r12->state == SLOT_STATE_SEND_START)
{
for (r4 = 0; r4 < WINDOW_COUNT; ++r4)
{
@@ -2011,20 +2010,20 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct
r12->now_p[r4] = r12->src + r12->payloadSize * r4;
}
r12->remainSize = r12->dataSize;
- r12->state = 0x8022;
+ r12->state = SLOT_STATE_SENDING;
}
else
{
r12->n[0] = 0;
r12->remainSize = 0;
- r12->state = 0x8023;
+ r12->state = SLOT_STATE_SEND_LAST;
}
}
_081E30AE:
}
- else if (r12->state == 0x8023)
+ else if (r12->state == SLOT_STATE_SEND_LAST)
{
- r12->state = 0x8020;
+ r12->state = SLOT_STATE_SEND_NULL;
}
}
if (r12->state != r9
@@ -2051,30 +2050,30 @@ static void rfu_STC_NI_receive_Receiver(u8 r8, const struct RfuLocalStruct *r6,
if (r6->unk02 == 3)
{
gRfuStatic->NIEndRecvFlag |= 1 << r8;
- if (r4->recv.state == 0x8042)
+ if (r4->recv.state == SLOT_STATE_RECEIVING)
{
r4->recv.phase = 0;
r4->recv.n[0] = 0;
- r4->recv.state = 0x8043;
+ r4->recv.state = SLOT_STATE_RECV_LAST;
}
}
else if (r6->unk02 == 2)
{
- if (r9 == 0x8041 && !r5->remainSize)
+ if (r9 == SLOT_STATE_RECV_START && !r5->remainSize)
rfu_STC_NI_initSlot_asRecvDataEntity(r8, r5);
- if (r5->state == 0x8042)
+ if (r5->state == SLOT_STATE_RECEIVING)
r7 = 1;
}
else if (r6->unk02 == 1)
{
- if (r9 == 0x8041)
+ if (r9 == SLOT_STATE_RECV_START)
{
r7 = 1;
}
else
{
rfu_STC_NI_initSlot_asRecvControllData(r8, r5);
- if (r4->recv.state != 0x8041)
+ if (r4->recv.state != SLOT_STATE_RECV_START)
return;
r7 = 1;
}
@@ -2084,7 +2083,7 @@ static void rfu_STC_NI_receive_Receiver(u8 r8, const struct RfuLocalStruct *r6,
if (r6->unk05 == ((r5->n[r6->unk04] + 1) & 3))
{
gRfuFixed->fastCopyPtr(&sp00, (u8 **)&r5->now_p[r6->unk04], r6->unk06);
- if (r5->state == 0x8042)
+ if (r5->state == SLOT_STATE_RECEIVING)
r5->now_p[r6->unk04] += 3 * r5->payloadSize;
r5->remainSize -= r6->unk06;
r5->n[r6->unk04] = r6->unk05;
@@ -2110,7 +2109,7 @@ static void rfu_STC_NI_initSlot_asRecvControllData(u8 r4, struct NIComm *r2)
u32 r5;
u8 r6;
- if (gRfuLinkStatus->parentChild == 1)
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
{
r5 = 3;
r1 = &gRfuLinkStatus->remainLLFrameSizeParent;
@@ -2125,8 +2124,8 @@ static void rfu_STC_NI_initSlot_asRecvControllData(u8 r4, struct NIComm *r2)
{
if (*r1 < r5)
{
- r2->state = 73;
- r2->errorCode = 0x702;
+ r2->state = SLOT_STATE_RECV_IGNORE;
+ r2->errorCode = ERR_RECV_REPLY_SUBFRAME_SIZE;
gRfuStatic->recvErrorFlag |= r6;
}
else
@@ -2138,7 +2137,7 @@ static void rfu_STC_NI_initSlot_asRecvControllData(u8 r4, struct NIComm *r2)
r2->ack = 1;
r2->payloadSize = 0;
r2->bmSlot = r6;
- r2->state = 0x8041;
+ r2->state = SLOT_STATE_RECV_START;
gRfuLinkStatus->recvSlotNIFlag |= r6;
}
}
@@ -2159,20 +2158,20 @@ static void rfu_STC_NI_initSlot_asRecvDataEntity(u8 r5, struct NIComm *r4)
r1 = 1 << r5;
gRfuStatic->recvErrorFlag |= r1;
gRfuLinkStatus->recvSlotNIFlag &= ~r1;
- r4->errorCode = 0x701;
- r4->state = 71;
+ r4->errorCode = ERR_RECV_BUFF_OVER;
+ r4->state = SLOT_STATE_RECV_FAILED;
rfu_STC_releaseFrame(r5, 1, r4);
return;
}
r4->now_p[0] = gRfuSlotStatusNI[r5]->recvBuffer;
}
- for (r3 = 0; r3 < 4; ++r3)
+ for (r3 = 0; r3 < WINDOW_COUNT; ++r3)
{
r4->n[r3] = 0;
r4->now_p[r3] = &r4->now_p[0][r4->payloadSize * r3];
}
r4->remainSize = r4->dataSize;
- r4->state = 0x8042;
+ r4->state = SLOT_STATE_RECEIVING;
}
static void rfu_NI_checkCommFailCounter(void)
diff --git a/src/librfu_s32id.c b/src/librfu_s32id.c
index c3bb922e2..7c99cda2d 100644
--- a/src/librfu_s32id.c
+++ b/src/librfu_s32id.c
@@ -17,10 +17,10 @@ s32 AgbRFU_checkID(u8 r5)
if (REG_IME == 0)
return -1;
r8 = REG_IE;
- gRfuState->state = 10;
+ gSTWIStatus->state = 10;
STWI_set_Callback_ID(Sio32IDIntr);
Sio32IDInit();
- r4 = &REG_TMCNT_L(gRfuState->timerSelect);
+ r4 = &REG_TMCNT_L(gSTWIStatus->timerSelect);
r5 *= 8;
while (--r5 != 0xFF)
{
@@ -38,7 +38,7 @@ s32 AgbRFU_checkID(u8 r5)
REG_IME = 0;
REG_IE = r8;
REG_IME = 1;
- gRfuState->state = 0;
+ gSTWIStatus->state = 0;
STWI_set_Callback_ID(NULL);
return r6;
}
@@ -46,7 +46,7 @@ s32 AgbRFU_checkID(u8 r5)
static void Sio32IDInit(void)
{
REG_IME = 0;
- REG_IE &= ~((8 << gRfuState->timerSelect) | INTR_FLAG_SERIAL);
+ REG_IE &= ~((8 << gSTWIStatus->timerSelect) | INTR_FLAG_SERIAL);
REG_IME = 1;
REG_RCNT = 0;
REG_SIOCNT = SIO_32BIT_MODE;
diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c
index 50e102f19..b88f21737 100644
--- a/src/librfu_stwi.c
+++ b/src/librfu_stwi.c
@@ -8,6 +8,8 @@ static void STWI_stop_timer(void);
static s32 STWI_restart_Command(void);
static s32 STWI_reset_ClockCounter(void);
+struct STWIStatus *gSTWIStatus;
+
void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam)
{
// If we're copying our interrupt into RAM, DMA it to block1 and use
@@ -17,27 +19,27 @@ void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, b
{
*interrupt = (IntrFunc)interruptStruct->block1;
DmaCopy16(3, &IntrSIO32, interruptStruct->block1, sizeof(interruptStruct->block1));
- gRfuState = &interruptStruct->block2;
+ gSTWIStatus = &interruptStruct->block2;
}
else
{
*interrupt = IntrSIO32;
- gRfuState = (struct STWIStatus *)interruptStruct->block1;
- }
- gRfuState->rxPacket = &interruptStruct->rxPacketAlloc;
- gRfuState->txPacket = &interruptStruct->txPacketAlloc;
- gRfuState->msMode = 1;
- gRfuState->state = 0;
- gRfuState->reqLength = 0;
- gRfuState->reqNext = 0;
- gRfuState->ackLength = 0;
- gRfuState->ackNext = 0;
- gRfuState->ackActiveCommand = 0;
- gRfuState->timerState = 0;
- gRfuState->timerActive = 0;
- gRfuState->error = 0;
- gRfuState->recoveryCount = 0;
- gRfuState->unk_2c = 0;
+ gSTWIStatus = (struct STWIStatus *)interruptStruct->block1;
+ }
+ gSTWIStatus->rxPacket = &interruptStruct->rxPacketAlloc;
+ gSTWIStatus->txPacket = &interruptStruct->txPacketAlloc;
+ gSTWIStatus->msMode = 1;
+ gSTWIStatus->state = 0;
+ gSTWIStatus->reqLength = 0;
+ gSTWIStatus->reqNext = 0;
+ gSTWIStatus->ackLength = 0;
+ gSTWIStatus->ackNext = 0;
+ gSTWIStatus->ackActiveCommand = 0;
+ gSTWIStatus->timerState = 0;
+ gSTWIStatus->timerActive = 0;
+ gSTWIStatus->error = 0;
+ gSTWIStatus->recoveryCount = 0;
+ gSTWIStatus->unk_2c = 0;
REG_RCNT = 0x100; // TODO: mystery bit?
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
STWI_init_Callback_M();
@@ -48,8 +50,8 @@ void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, b
void STWI_init_timer(IntrFunc *interrupt, s32 timerSelect)
{
*interrupt = STWI_intr_timer;
- gRfuState->timerSelect = timerSelect;
- IntrEnable(INTR_FLAG_TIMER0 << gRfuState->timerSelect);
+ gSTWIStatus->timerSelect = timerSelect;
+ IntrEnable(INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect);
}
void AgbRFU_SoftReset(void)
@@ -59,8 +61,8 @@ void AgbRFU_SoftReset(void)
REG_RCNT = 0x8000;
REG_RCNT = 0x80A0; // all these bits are undocumented
- timerL = &REG_TMCNT_L(gRfuState->timerSelect);
- timerH = &REG_TMCNT_H(gRfuState->timerSelect);
+ timerL = &REG_TMCNT_L(gSTWIStatus->timerSelect);
+ timerH = &REG_TMCNT_H(gSTWIStatus->timerSelect);
*timerH = 0;
*timerL = 0;
*timerH = TIMER_ENABLE | TIMER_1024CLK;
@@ -69,24 +71,24 @@ void AgbRFU_SoftReset(void)
*timerH = 3;
REG_RCNT = 0x80A0;
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
- gRfuState->state = 0;
- gRfuState->reqLength = 0;
- gRfuState->reqNext = 0;
- gRfuState->reqActiveCommand = 0;
- gRfuState->ackLength = 0;
- gRfuState->ackNext = 0;
- gRfuState->ackActiveCommand = 0;
- gRfuState->timerState = 0;
- gRfuState->timerActive = 0;
- gRfuState->error = 0;
- gRfuState->msMode = 1;
- gRfuState->recoveryCount = 0;
- gRfuState->unk_2c = 0;
+ gSTWIStatus->state = 0;
+ gSTWIStatus->reqLength = 0;
+ gSTWIStatus->reqNext = 0;
+ gSTWIStatus->reqActiveCommand = 0;
+ gSTWIStatus->ackLength = 0;
+ gSTWIStatus->ackNext = 0;
+ gSTWIStatus->ackActiveCommand = 0;
+ gSTWIStatus->timerState = 0;
+ gSTWIStatus->timerActive = 0;
+ gSTWIStatus->error = 0;
+ gSTWIStatus->msMode = 1;
+ gSTWIStatus->recoveryCount = 0;
+ gSTWIStatus->unk_2c = 0;
}
void STWI_set_MS_mode(u8 mode)
{
- gRfuState->msMode = mode;
+ gSTWIStatus->msMode = mode;
}
u16 STWI_read_status(u8 index)
@@ -94,13 +96,13 @@ u16 STWI_read_status(u8 index)
switch (index)
{
case 0:
- return gRfuState->error;
+ return gSTWIStatus->error;
case 1:
- return gRfuState->msMode;
+ return gSTWIStatus->msMode;
case 2:
- return gRfuState->state;
+ return gSTWIStatus->state;
case 3:
- return gRfuState->reqActiveCommand;
+ return gSTWIStatus->reqActiveCommand;
default:
return 0xFFFF;
}
@@ -119,31 +121,31 @@ void STWI_init_Callback_S(void)
// The callback can take 2 or 3 arguments.
void STWI_set_Callback_M(void *callbackM)
{
- gRfuState->callbackM = callbackM;
+ gSTWIStatus->callbackM = callbackM;
}
void STWI_set_Callback_S(void (*callbackS)(u16))
{
- gRfuState->callbackS = callbackS;
+ gSTWIStatus->callbackS = callbackS;
}
void STWI_set_Callback_ID(void (*func)(void)) // name in SDK, but is actually setting a function pointer
{
- gRfuState->unk_20 = func;
+ gSTWIStatus->unk_20 = func;
}
u16 STWI_poll_CommandEnd(void)
{
- while (gRfuState->unk_2c == TRUE)
+ while (gSTWIStatus->unk_2c == TRUE)
;
- return gRfuState->error;
+ return gSTWIStatus->error;
}
void STWI_send_ResetREQ(void)
{
if (!STWI_init(ID_RESET_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -152,7 +154,7 @@ void STWI_send_LinkStatusREQ(void)
{
if (!STWI_init(ID_LINK_STATUS_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -161,7 +163,7 @@ void STWI_send_VersionStatusREQ(void)
{
if (!STWI_init(ID_VERSION_STATUS_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -170,7 +172,7 @@ void STWI_send_SystemStatusREQ(void)
{
if (!STWI_init(ID_SYSTEM_STATUS_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -179,7 +181,7 @@ void STWI_send_SlotStatusREQ(void)
{
if (!STWI_init(ID_SLOT_STATUS_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -188,7 +190,7 @@ void STWI_send_ConfigStatusREQ(void)
{
if (!STWI_init(ID_CONFIG_STATUS_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -200,9 +202,9 @@ void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data)
if (!STWI_init(ID_GAME_CONFIG_REQ))
{
- gRfuState->reqLength = 6;
+ gSTWIStatus->reqLength = 6;
// TODO: what is unk1
- packetBytes = gRfuState->txPacket->rfuPacket8.data;
+ packetBytes = gSTWIStatus->txPacket->rfuPacket8.data;
packetBytes += sizeof(u32);
*(u16 *)packetBytes = *(u16 *)unk1;
packetBytes += sizeof(u16);
@@ -229,8 +231,8 @@ void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3)
{
u8 *packetBytes;
- gRfuState->reqLength = 1;
- packetBytes = gRfuState->txPacket->rfuPacket8.data;
+ gSTWIStatus->reqLength = 1;
+ packetBytes = gSTWIStatus->txPacket->rfuPacket8.data;
packetBytes += sizeof(u32);
*packetBytes++ = unk3;
*packetBytes++ = unk2;
@@ -243,7 +245,7 @@ void STWI_send_SC_StartREQ(void)
{
if (!STWI_init(ID_SC_START_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -252,7 +254,7 @@ void STWI_send_SC_PollingREQ(void)
{
if (!STWI_init(ID_SC_POLL_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -261,7 +263,7 @@ void STWI_send_SC_EndREQ(void)
{
if (!STWI_init(ID_SC_END_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -270,7 +272,7 @@ void STWI_send_SP_StartREQ(void)
{
if (!STWI_init(ID_SP_START_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -279,7 +281,7 @@ void STWI_send_SP_PollingREQ(void)
{
if (!STWI_init(ID_SP_POLL_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -288,7 +290,7 @@ void STWI_send_SP_EndREQ(void)
{
if (!STWI_init(ID_SP_END_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -297,8 +299,8 @@ void STWI_send_CP_StartREQ(u16 unk1)
{
if (!STWI_init(ID_CP_START_REQ))
{
- gRfuState->reqLength = 1;
- gRfuState->txPacket->rfuPacket32.data[0] = unk1;
+ gSTWIStatus->reqLength = 1;
+ gSTWIStatus->txPacket->rfuPacket32.data[0] = unk1;
STWI_start_Command();
}
}
@@ -307,7 +309,7 @@ void STWI_send_CP_PollingREQ(void)
{
if (!STWI_init(ID_CP_POLL_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -316,7 +318,7 @@ void STWI_send_CP_EndREQ(void)
{
if (!STWI_init(ID_CP_END_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -328,8 +330,8 @@ void STWI_send_DataTxREQ(const void *in, u8 size)
u8 reqLength = (size / sizeof(u32));
if (size & (sizeof(u32) - 1))
reqLength += 1;
- gRfuState->reqLength = reqLength;
- CpuCopy32(in, gRfuState->txPacket->rfuPacket32.data, gRfuState->reqLength * sizeof(u32));
+ gSTWIStatus->reqLength = reqLength;
+ CpuCopy32(in, gSTWIStatus->txPacket->rfuPacket32.data, gSTWIStatus->reqLength * sizeof(u32));
STWI_start_Command();
}
}
@@ -341,8 +343,8 @@ void STWI_send_DataTxAndChangeREQ(const void *in, u8 size)
u8 reqLength = (size / sizeof(u32));
if (size & (sizeof(u32) - 1))
reqLength += 1;
- gRfuState->reqLength = reqLength;
- CpuCopy32(in, gRfuState->txPacket->rfuPacket32.data, gRfuState->reqLength * sizeof(u32));
+ gSTWIStatus->reqLength = reqLength;
+ CpuCopy32(in, gSTWIStatus->txPacket->rfuPacket32.data, gSTWIStatus->reqLength * sizeof(u32));
STWI_start_Command();
}
}
@@ -351,7 +353,7 @@ void STWI_send_DataRxREQ(void)
{
if (!STWI_init(ID_DATA_RX_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -360,7 +362,7 @@ void STWI_send_MS_ChangeREQ(void)
{
if (!STWI_init(ID_MS_CHANGE_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -371,14 +373,14 @@ void STWI_send_DataReadyAndChangeREQ(u8 unk)
{
if (!unk)
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
}
else
{
u8 *packetBytes;
- gRfuState->reqLength = 1;
- packetBytes = gRfuState->txPacket->rfuPacket8.data;
+ gSTWIStatus->reqLength = 1;
+ packetBytes = gSTWIStatus->txPacket->rfuPacket8.data;
packetBytes += sizeof(u32);
*packetBytes++ = unk;
*packetBytes++ = 0;
@@ -395,8 +397,8 @@ void STWI_send_DisconnectedAndChangeREQ(u8 unk0, u8 unk1)
{
u8 *packetBytes;
- gRfuState->reqLength = 1;
- packetBytes = gRfuState->txPacket->rfuPacket8.data;
+ gSTWIStatus->reqLength = 1;
+ packetBytes = gSTWIStatus->txPacket->rfuPacket8.data;
packetBytes += sizeof(u32);
*packetBytes++ = unk0;
*packetBytes++ = unk1;
@@ -410,7 +412,7 @@ void STWI_send_ResumeRetransmitAndChangeREQ(void)
{
if (!STWI_init(ID_RESUME_RETRANSMIT_AND_CHANGE_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -419,8 +421,8 @@ void STWI_send_DisconnectREQ(u8 unk)
{
if (!STWI_init(ID_DISCONNECT_REQ))
{
- gRfuState->reqLength = 1;
- gRfuState->txPacket->rfuPacket32.data[0] = unk;
+ gSTWIStatus->reqLength = 1;
+ gSTWIStatus->txPacket->rfuPacket32.data[0] = unk;
STWI_start_Command();
}
}
@@ -429,8 +431,8 @@ void STWI_send_TestModeREQ(u8 unk0, u8 unk1)
{
if (!STWI_init(ID_TEST_MODE_REQ))
{
- gRfuState->reqLength = 1;
- gRfuState->txPacket->rfuPacket32.data[0] = unk0 | (unk1 << 8);
+ gSTWIStatus->reqLength = 1;
+ gSTWIStatus->txPacket->rfuPacket32.data[0] = unk0 | (unk1 << 8);
STWI_start_Command();
}
}
@@ -442,9 +444,9 @@ void STWI_send_CPR_StartREQ(u16 unk0, u16 unk1, u8 unk2)
if (!STWI_init(ID_CPR_START_REQ))
{
- gRfuState->reqLength = 2;
+ gSTWIStatus->reqLength = 2;
arg1 = unk1 | (unk0 << 16);
- packetData = gRfuState->txPacket->rfuPacket32.data;
+ packetData = gSTWIStatus->txPacket->rfuPacket32.data;
packetData[0] = arg1;
packetData[1] = unk2;
STWI_start_Command();
@@ -455,7 +457,7 @@ void STWI_send_CPR_PollingREQ(void)
{
if (!STWI_init(ID_CPR_POLL_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -464,7 +466,7 @@ void STWI_send_CPR_EndREQ(void)
{
if (!STWI_init(ID_CPR_END_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
@@ -473,18 +475,18 @@ void STWI_send_StopModeREQ(void)
{
if (!STWI_init(ID_STOP_MODE_REQ))
{
- gRfuState->reqLength = 0;
+ gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
static void STWI_intr_timer(void)
{
- switch (gRfuState->timerState)
+ switch (gSTWIStatus->timerState)
{
// TODO: Make an enum for these
case 2:
- gRfuState->timerActive = 1;
+ gSTWIStatus->timerActive = 1;
STWI_set_timer(50);
break;
case 1:
@@ -493,11 +495,11 @@ static void STWI_intr_timer(void)
STWI_restart_Command();
break;
case 3:
- gRfuState->timerActive = 1;
+ gSTWIStatus->timerActive = 1;
STWI_stop_timer();
STWI_reset_ClockCounter();
- if (gRfuState->callbackM != NULL)
- gRfuState->callbackM(255, 0);
+ if (gSTWIStatus->callbackM != NULL)
+ gSTWIStatus->callbackM(255, 0);
break;
}
}
@@ -507,78 +509,78 @@ static void STWI_set_timer(u8 unk)
vu16 *timerL;
vu16 *timerH;
- timerL = &REG_TMCNT_L(gRfuState->timerSelect);
- timerH = &REG_TMCNT_H(gRfuState->timerSelect);
+ timerL = &REG_TMCNT_L(gSTWIStatus->timerSelect);
+ timerH = &REG_TMCNT_H(gSTWIStatus->timerSelect);
REG_IME = 0;
switch (unk)
{
case 50:
*timerL = 0xFCCB;
- gRfuState->timerState = 1;
+ gSTWIStatus->timerState = 1;
break;
case 80:
*timerL = 0xFAE0;
- gRfuState->timerState = 2;
+ gSTWIStatus->timerState = 2;
break;
case 100:
*timerL = 0xF996;
- gRfuState->timerState = 3;
+ gSTWIStatus->timerState = 3;
break;
case 130:
*timerL = 0xF7AD;
- gRfuState->timerState = 4;
+ gSTWIStatus->timerState = 4;
break;
}
*timerH = TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_1024CLK;
- REG_IF = INTR_FLAG_TIMER0 << gRfuState->timerSelect;
+ REG_IF = INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect;
REG_IME = 1;
}
static void STWI_stop_timer(void)
{
- gRfuState->timerState = 0;
- REG_TMCNT_L(gRfuState->timerSelect) = 0;
- REG_TMCNT_H(gRfuState->timerSelect) = 0;
+ gSTWIStatus->timerState = 0;
+ REG_TMCNT_L(gSTWIStatus->timerSelect) = 0;
+ REG_TMCNT_H(gSTWIStatus->timerSelect) = 0;
}
static u16 STWI_init(u8 request)
{
if (!REG_IME)
{
- gRfuState->error = 6;
- if (gRfuState->callbackM != NULL)
- gRfuState->callbackM(request, gRfuState->error);
+ gSTWIStatus->error = ERR_REQ_CMD_IME_DISABLE;
+ if (gSTWIStatus->callbackM != NULL)
+ gSTWIStatus->callbackM(request, gSTWIStatus->error);
return TRUE;
}
- else if (gRfuState->unk_2c == TRUE)
+ else if (gSTWIStatus->unk_2c == TRUE)
{
- gRfuState->error = 2;
- gRfuState->unk_2c = FALSE;
- if (gRfuState->callbackM != NULL)
- gRfuState->callbackM(request, gRfuState->error);
+ gSTWIStatus->error = ERR_REQ_CMD_SENDING;
+ gSTWIStatus->unk_2c = FALSE;
+ if (gSTWIStatus->callbackM != NULL)
+ gSTWIStatus->callbackM(request, gSTWIStatus->error);
return TRUE;
}
- else if(!gRfuState->msMode)
+ else if(!gSTWIStatus->msMode)
{
- gRfuState->error = 4;
- if (gRfuState->callbackM != NULL)
- gRfuState->callbackM(request, gRfuState->error, gRfuState);
+ gSTWIStatus->error = ERR_REQ_CMD_CLOCK_SLAVE;
+ if (gSTWIStatus->callbackM != NULL)
+ gSTWIStatus->callbackM(request, gSTWIStatus->error, gSTWIStatus);
return TRUE;
}
else
{
- gRfuState->unk_2c = TRUE;
- gRfuState->reqActiveCommand = request;
- gRfuState->state = 0;
- gRfuState->reqLength = 0;
- gRfuState->reqNext = 0;
- gRfuState->ackLength = 0;
- gRfuState->ackNext = 0;
- gRfuState->ackActiveCommand = 0;
- gRfuState->timerState = 0;
- gRfuState->timerActive = 0;
- gRfuState->error = 0;
- gRfuState->recoveryCount = 0;
+ gSTWIStatus->unk_2c = TRUE;
+ gSTWIStatus->reqActiveCommand = request;
+ gSTWIStatus->state = 0;
+ gSTWIStatus->reqLength = 0;
+ gSTWIStatus->reqNext = 0;
+ gSTWIStatus->ackLength = 0;
+ gSTWIStatus->ackNext = 0;
+ gSTWIStatus->ackActiveCommand = 0;
+ gSTWIStatus->timerState = 0;
+ gSTWIStatus->timerActive = 0;
+ gSTWIStatus->error = 0;
+ gSTWIStatus->recoveryCount = 0;
REG_RCNT = 0x100;
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
return FALSE;
@@ -589,15 +591,15 @@ static s32 STWI_start_Command(void)
{
u16 imeTemp;
- // equivalent to gRfuState->txPacket->rfuPacket32.command,
+ // equivalent to gSTWIStatus->txPacket->rfuPacket32.command,
// but the cast here is required to avoid register issue
- *(u32 *)gRfuState->txPacket->rfuPacket8.data = 0x99660000 | (gRfuState->reqLength << 8) | gRfuState->reqActiveCommand;
- REG_SIODATA32 = gRfuState->txPacket->rfuPacket32.command;
- gRfuState->state = 0;
- gRfuState->reqNext = 1;
+ *(u32 *)gSTWIStatus->txPacket->rfuPacket8.data = 0x99660000 | (gSTWIStatus->reqLength << 8) | gSTWIStatus->reqActiveCommand;
+ REG_SIODATA32 = gSTWIStatus->txPacket->rfuPacket32.command;
+ gSTWIStatus->state = 0;
+ gSTWIStatus->reqNext = 1;
imeTemp = REG_IME;
REG_IME = 0;
- REG_IE |= (INTR_FLAG_TIMER0 << gRfuState->timerSelect);
+ REG_IE |= (INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect);
REG_IE |= INTR_FLAG_SERIAL;
REG_IME = imeTemp;
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_MULTI_BUSY | SIO_115200_BPS;
@@ -606,27 +608,27 @@ static s32 STWI_start_Command(void)
static s32 STWI_restart_Command(void)
{
- if (gRfuState->recoveryCount <= 1)
+ if (gSTWIStatus->recoveryCount <= 1)
{
- ++gRfuState->recoveryCount;
+ ++gSTWIStatus->recoveryCount;
STWI_start_Command();
}
else
{
- if (gRfuState->reqActiveCommand == ID_MS_CHANGE_REQ || gRfuState->reqActiveCommand == ID_DATA_TX_AND_CHANGE_REQ || gRfuState->reqActiveCommand == ID_UNK35_REQ || gRfuState->reqActiveCommand == ID_RESUME_RETRANSMIT_AND_CHANGE_REQ)
+ if (gSTWIStatus->reqActiveCommand == ID_MS_CHANGE_REQ || gSTWIStatus->reqActiveCommand == ID_DATA_TX_AND_CHANGE_REQ || gSTWIStatus->reqActiveCommand == ID_UNK35_REQ || gSTWIStatus->reqActiveCommand == ID_RESUME_RETRANSMIT_AND_CHANGE_REQ)
{
- gRfuState->error = 1;
- gRfuState->unk_2c = 0;
- if (gRfuState->callbackM != NULL)
- gRfuState->callbackM(gRfuState->reqActiveCommand, gRfuState->error);
+ gSTWIStatus->error = ERR_REQ_CMD_CLOCK_DRIFT;
+ gSTWIStatus->unk_2c = 0;
+ if (gSTWIStatus->callbackM != NULL)
+ gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error);
}
else
{
- gRfuState->error = 1;
- gRfuState->unk_2c = 0;
- if (gRfuState->callbackM != NULL)
- gRfuState->callbackM(gRfuState->reqActiveCommand, gRfuState->error);
- gRfuState->state = 4; // TODO: what's 4
+ gSTWIStatus->error = ERR_REQ_CMD_CLOCK_DRIFT;
+ gSTWIStatus->unk_2c = 0;
+ if (gSTWIStatus->callbackM != NULL)
+ gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error);
+ gSTWIStatus->state = 4; // TODO: what's 4
}
}
return 0;
@@ -634,9 +636,9 @@ static s32 STWI_restart_Command(void)
static s32 STWI_reset_ClockCounter(void)
{
- gRfuState->state = 5; // TODO: what is 5
- gRfuState->reqLength = 0;
- gRfuState->reqNext = 0;
+ gSTWIStatus->state = 5; // TODO: what is 5
+ gSTWIStatus->reqLength = 0;
+ gSTWIStatus->reqNext = 0;
REG_SIODATA32 = (1 << 31);
REG_SIOCNT = 0;
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
diff --git a/sym_bss.txt b/sym_bss.txt
index 06502497e..08f390b01 100644
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -74,7 +74,7 @@ gUnknown_3000FE8: @ 3000FE8
gUnknown_3001188: @ 3001188
.space 0x8
-gUnknown_3001190: @ 3001190
+gRfuAPIBuffer: @ 3001190
.space 0xE68
gUnknown_3001FF8: @ 3001FF8
diff --git a/sym_common.txt b/sym_common.txt
index 188981dbe..c50f09540 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -160,6 +160,8 @@ gUnknown_3005E94: @ 3005E94
.include "m4a.o"
.include "agb_flash.o"
.align 2
+ .include "librfu_stwi.o"
+ .align 4
.include "librfu_rfu.o"
.align 4
.include "librfu_s32id.o"