summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/librfu_rfu.c787
-rw-r--r--src/librfu_s32id.c163
-rw-r--r--src/librfu_stwi.c67
3 files changed, 509 insertions, 508 deletions
diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c
index 6a4fee158..7e4e26fad 100644
--- a/src/librfu_rfu.c
+++ b/src/librfu_rfu.c
@@ -1,4 +1,3 @@
-#include "global.h"
#include "librfu.h"
struct RfuHeader
@@ -46,10 +45,6 @@ static void rfu_CB_sendData(UNUSED u8, u16);
static void rfu_CB_sendData2(UNUSED u8, u16);
static void rfu_CB_sendData3(u8, u16);
static void rfu_CB_recvData(u8, u16);
-static s32 sub_81E349C(u8);
-static void sub_81E36B8(void);
-static void sub_81E3550(void);
-static s32 sub_81E35C4(void);
static void rfu_enableREQCallback(bool8);
static void rfu_STC_clearAPIVariables(void);
static void rfu_STC_readChildList(void);
@@ -74,17 +69,15 @@ static void rfu_STC_NI_initSlot_asRecvControllData(u8, struct NIComm *);
extern const char _Str_RFU_MBOOT[];
extern const struct RfuHeader _Str_RfuHeader[2];
-extern const u16 _Str_Sio32ID[];
-struct RfuStruct *gRfuState;
-ALIGNED(8) struct RfuSlotStatusUNI *gRfuSlotStatusUNI[4];
-struct RfuSlotStatusNI *gRfuSlotStatusNI[4];
+struct STWIStatus *gRfuState;
+ALIGNED(8) struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX];
+struct RfuSlotStatusNI *gRfuSlotStatusNI[RFU_CHILD_MAX];
struct RfuLinkStatus *gRfuLinkStatus;
struct RfuStatic *gRfuStatic;
struct RfuFixed *gRfuFixed;
-ALIGNED(8) struct Unk_3007470 gUnknown_3007470;
-u16 rfu_initializeAPI(struct Unk_3001190 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam)
+u16 rfu_initializeAPI(struct RfuStructsBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam)
{
u16 i;
u16 *dst;
@@ -92,44 +85,44 @@ u16 rfu_initializeAPI(struct Unk_3001190 *unk0, u16 unk1, IntrFunc *interrupt, b
u16 r3;
// is in EWRAM?
- if (((u32)unk0 & 0xF000000) == 0x2000000 && copyInterruptToRam)
+ if (((u32)APIBuffer & 0xF000000) == 0x2000000 && copyInterruptToRam)
return 2;
// is not 4-byte aligned?
- if ((u32)unk0 & 3)
+ if ((u32)APIBuffer & 3)
return 2;
if (copyInterruptToRam)
{
// An assert/debug print may have existed before, ie
- // printf("%s %u < %u", "somefile.c:12345", unk1, num)
+ // printf("%s %u < %u", "somefile.c:12345", buffByteSize, num)
// to push this into r3?
r3 = 0xe64;
- if (unk1 < r3)
+ if (buffByteSize < r3)
return 1;
}
if (!copyInterruptToRam)
{
r3 = 0x504; // same as above, this should be r3 not r0
- if (unk1 < r3)
+ if (buffByteSize < r3)
return 1;
}
- gRfuLinkStatus = &unk0->linkStatus;
- gRfuStatic = &unk0->static_;
- gRfuFixed = &unk0->fixed;
- gRfuSlotStatusNI[0] = &unk0->NI[0];
- gRfuSlotStatusUNI[0] = &unk0->UNI[0];
- for (i = 1; i < NELEMS(gRfuSlotStatusNI); ++i)
+ gRfuLinkStatus = &APIBuffer->linkStatus;
+ gRfuStatic = &APIBuffer->static_;
+ gRfuFixed = &APIBuffer->fixed;
+ gRfuSlotStatusNI[0] = &APIBuffer->NI[0];
+ gRfuSlotStatusUNI[0] = &APIBuffer->UNI[0];
+ for (i = 1; i < RFU_CHILD_MAX; ++i)
{
gRfuSlotStatusNI[i] = &gRfuSlotStatusNI[i - 1][1];
gRfuSlotStatusUNI[i] = &gRfuSlotStatusUNI[i - 1][1];
}
// TODO: Is it possible to fix the following 2 statements?
// It's equivalent to:
- // gRfuFixed->STWIBuffer = &unk0->intr;
- // STWI_init_all(&unk0->intr, interrupt, copyInterruptToRam);
+ // gRfuFixed->STWIBuffer = &APIBuffer->intr;
+ // STWI_init_all(&APIBuffer->intr, sioIntrTable_p, copyInterruptToRam);
gRfuFixed->STWIBuffer = (struct RfuIntrStruct *)&gRfuSlotStatusUNI[3][1];
- STWI_init_all((struct RfuIntrStruct *)&gRfuSlotStatusUNI[3][1], interrupt, copyInterruptToRam);
+ STWI_init_all((struct RfuIntrStruct *)&gRfuSlotStatusUNI[3][1], sioIntrTable_p, copyInterruptToRam);
rfu_STC_clearAPIVariables();
- for (i = 0; i < NELEMS(gRfuSlotStatusNI); ++i)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
gRfuSlotStatusNI[i]->recvBuffer = 0;
gRfuSlotStatusNI[i]->recvBufferSize = 0;
@@ -157,7 +150,7 @@ static void rfu_STC_clearAPIVariables(void)
CpuFill16(0, gRfuLinkStatus, sizeof(struct RfuLinkStatus));
gRfuLinkStatus->watchInterval = 4;
gRfuStatic->nowWatchInterval = 0;
- gRfuLinkStatus->connMode = 0xFF;
+ gRfuLinkStatus->parentChild = 0xFF;
rfu_clearAllSlot();
gRfuStatic->SCStartFlag = 0;
for (i = 0; i < NELEMS(gRfuStatic->cidBak); ++i)
@@ -176,7 +169,7 @@ u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag)
struct RfuIntrStruct *buf;
*ackFlag = 0;
- if (gRfuLinkStatus->connMode != 1)
+ if (gRfuLinkStatus->parentChild != 1)
return 0x300;
buf = rfu_getSTWIRecvBuffer();
switch (buf->rxPacketAlloc.rfuPacket8.data[0])
@@ -193,9 +186,9 @@ u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag)
}
}
-void rfu_setTimerInterrupt(u8 which, IntrFunc *intr)
+void rfu_setTimerInterrupt(u8 timerNo, IntrFunc *timerIntrTable_p)
{
- STWI_init_timer(intr, which);
+ STWI_init_timer(timerIntrTable_p, timerNo);
}
struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void)
@@ -203,12 +196,12 @@ struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void)
return gRfuFixed->STWIBuffer;
}
-void rfu_setMSCCallback(void (*callback)(u16))
+void rfu_setMSCCallback(void (*callback)(u16 reqCommandId))
{
STWI_set_Callback_S(callback);
}
-void rfu_setREQCallback(void (*callback)(u16, u16))
+void rfu_setREQCallback(void (*callback)(u16 reqCommandId, u16 reqResult))
{
gRfuFixed->reqCallback = callback;
rfu_enableREQCallback(callback != NULL);
@@ -243,7 +236,7 @@ static void rfu_CB_defaultCallback(u8 r0, u16 reqResult)
for (i = 0; i < 4; ++i)
if ((r5 >> i) & 1)
rfu_STC_removeLinkData(i, 1);
- gRfuLinkStatus->connMode = 0xFF;
+ gRfuLinkStatus->parentChild = 0xFF;
}
}
@@ -259,18 +252,18 @@ void rfu_REQ_RFUStatus(void)
STWI_send_SystemStatusREQ();
}
-u32 rfu_getRFUStatus(u8 *status)
+u16 rfu_getRFUStatus(u8 *rfuState)
{
if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] != 0x93)
return 0x10;
if (STWI_poll_CommandEnd() == 0)
- *status = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7];
+ *rfuState = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7];
else
- *status = 0xFF;
+ *rfuState = 0xFF;
return 0;
}
-static s32 rfu_MBOOT_CHILD_inheritanceLinkStatus(void)
+u16 rfu_MBOOT_CHILD_inheritanceLinkStatus(void)
{
const char *s1 = _Str_RFU_MBOOT;
char *s2 = (char *)0x30000F0;
@@ -305,7 +298,7 @@ void rfu_REQ_stopMode(void)
{
AgbRFU_SoftReset();
rfu_STC_clearAPIVariables();
- if (sub_81E349C(8) == 0x8001)
+ if (AgbRFU_checkID(8) == 0x8001)
{
timerReg = &REG_TMCNT(gRfuState->timerSelect);
*timerReg = 0;
@@ -331,7 +324,7 @@ static void rfu_CB_stopMode(u8 a1, u16 reqResult)
rfu_STC_REQ_callback(a1, reqResult);
}
-s32 rfu_REQBN_softReset_and_checkID(void)
+u32 rfu_REQBN_softReset_and_checkID(void)
{
s32 r2;
@@ -339,7 +332,7 @@ s32 rfu_REQBN_softReset_and_checkID(void)
return -1;
AgbRFU_SoftReset();
rfu_STC_clearAPIVariables();
- if ((r2 = sub_81E349C(30)) == 0)
+ if ((r2 = AgbRFU_checkID(30)) == 0)
REG_SIOCNT = SIO_MULTI_MODE;
return r2;
}
@@ -357,11 +350,11 @@ static void rfu_CB_reset(u8 a1, u16 reqResult)
rfu_STC_REQ_callback(a1, reqResult);
}
-void rfu_REQ_configSystem(u16 r4, u8 r5, u8 r6)
+void rfu_REQ_configSystem(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer)
{
STWI_set_Callback_M(rfu_STC_REQ_callback);
- STWI_send_SystemConfigREQ((r4 & 3) | 0x3C, r5, r6);
- if (r6 == 0)
+ STWI_send_SystemConfigREQ((availSlotFlag & 3) | 0x3C, maxMFrame, mcTimer);
+ if (mcTimer == 0)
{
gRfuStatic->unk_1a = 1;
}
@@ -370,37 +363,37 @@ void rfu_REQ_configSystem(u16 r4, u8 r5, u8 r6)
u16 IMEBackup = REG_IME;
REG_IME = 0;
- gRfuStatic->unk_1a = Div(600, r6);
+ gRfuStatic->unk_1a = Div(600, mcTimer);
REG_IME = IMEBackup;
}
}
-void rfu_REQ_configGameData(u8 r6, u16 r2, const u8 *r4, const u8 *r7)
+void rfu_REQ_configGameData(u8 mbootFlag, u16 serialNo, const u8 *gname, const u8 *uname)
{
u8 sp[16];
u8 i;
u8 r3;
- const u8 *r5 = r4;
- const u8 *r1;
+ const u8 *gnameBackup = gname;
+ const u8 *unameBackup;
- sp[0] = r2;
- sp[1] = r2 >> 8;
- if (r6 != 0)
- sp[1] = (r2 >> 8) | 0x80;
+ sp[0] = serialNo;
+ sp[1] = serialNo >> 8;
+ if (mbootFlag != 0)
+ sp[1] = (serialNo >> 8) | 0x80;
for (i = 2; i < 15; ++i)
- sp[i] = *r4++;
+ sp[i] = *gname++;
r3 = 0;
- r1 = r7;
+ unameBackup = uname;
for (i = 0; i < 8; ++i)
{
- r3 += *r1++;
- r3 += *r5++;
+ r3 += *unameBackup++;
+ r3 += *gnameBackup++;
}
sp[15] = ~r3;
- if (r6 != 0)
+ if (mbootFlag != 0)
sp[14] = 0;
STWI_set_Callback_M(rfu_CB_configGameData);
- STWI_send_GameConfigREQ(sp, r7);
+ STWI_send_GameConfigREQ(sp, uname);
}
static void rfu_CB_configGameData(u8 ip, u16 r7)
@@ -413,22 +406,22 @@ static void rfu_CB_configGameData(u8 ip, u16 r7)
if (r7 == 0)
{
r1 = gRfuState->txPacket->rfuPacket8.data;
- r2 = gRfuLinkStatus->my.serialNum = r1[4];
- gRfuLinkStatus->my.serialNum = (r1[5] << 8) | r2;
+ r2 = gRfuLinkStatus->my.serialNo = r1[4];
+ gRfuLinkStatus->my.serialNo = (r1[5] << 8) | r2;
r4 = &r1[6];
- if (gRfuLinkStatus->my.serialNum & 0x8000)
+ if (gRfuLinkStatus->my.serialNo & 0x8000)
{
- gRfuLinkStatus->my.serialNum = gRfuLinkStatus->my.serialNum ^ 0x8000;
- gRfuLinkStatus->my.multibootFlag = 1;
+ gRfuLinkStatus->my.serialNo = gRfuLinkStatus->my.serialNo ^ 0x8000;
+ gRfuLinkStatus->my.mbootFlag = 1;
}
else
{
- gRfuLinkStatus->my.multibootFlag = 0;
+ gRfuLinkStatus->my.mbootFlag = 0;
}
- for (i = 0; i < NELEMS(gRfuLinkStatus->my.gname) - 2; ++i)
+ for (i = 0; i < RFU_GAME_NAME_LENGTH; ++i)
gRfuLinkStatus->my.gname[i] = *r4++;
++r4;
- for (i = 0; i < NELEMS(gRfuLinkStatus->my.uname) - 1; ++i)
+ for (i = 0; i < RFU_USER_NAME_LENGTH; ++i)
gRfuLinkStatus->my.uname[i] = *r4++;
}
rfu_STC_REQ_callback(ip, r7);
@@ -471,7 +464,7 @@ static void rfu_STC_clearLinkStatus(u8 r4)
CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner));
gRfuLinkStatus->findParentCount = 0;
}
- for (i = 0; i < NELEMS(gRfuLinkStatus->strength); ++i)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
gRfuLinkStatus->strength[i] = 0;
gRfuLinkStatus->connCount = 0;
gRfuLinkStatus->connSlotFlag = 0;
@@ -507,7 +500,7 @@ static void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult)
}
else if (r4 == 27)
{
- if (gRfuLinkStatus->connMode == 255)
+ if (gRfuLinkStatus->parentChild == 255)
gRfuLinkStatus->my.id = 0;
gRfuStatic->SCStartFlag = 0;
}
@@ -553,7 +546,7 @@ static void rfu_STC_readChildList(void)
++gRfuLinkStatus->connCount;
gRfuLinkStatus->partner[r2].id = *(u16 *)r4;
gRfuLinkStatus->partner[r2].slot = r2;
- gRfuLinkStatus->connMode = 1;
+ gRfuLinkStatus->parentChild = 1;
gRfuStatic->flags &= 0x7F;
gRfuStatic->cidBak[r2] = gRfuLinkStatus->partner[r2].id;
}
@@ -626,35 +619,35 @@ static void rfu_STC_readParentCandidateList(void)
r2 += 2;
r4_->slot = *r2;
r2 += 2;
- r4_->serialNum = *(u16 *)r2 & 0x7FFF;
+ r4_->serialNo = *(u16 *)r2 & 0x7FFF;
if (*(u16 *)r2 & 0x8000)
- r4_->multibootFlag = 1;
+ r4_->mbootFlag = 1;
else
- r4_->multibootFlag = 0;
+ r4_->mbootFlag = 0;
r2 += 2;
- for (r3 = 0; r3 < NELEMS(r4_->gname) - 2; ++r3)
+ for (r3 = 0; r3 < RFU_GAME_NAME_LENGTH; ++r3)
r4_->gname[r3] = *r2++;
++r2;
- for (r3 = 0; r3 < NELEMS(r4_->uname) - 1; ++r3)
+ for (r3 = 0; r3 < RFU_USER_NAME_LENGTH; ++r3)
r4_->uname[r3] = *r2++;
++gRfuLinkStatus->findParentCount;
}
}
}
-void rfu_REQ_startConnectParent(u16 r4)
+void rfu_REQ_startConnectParent(u16 pid)
{
u16 r3 = 0;
u8 i;
- for (i = 0; i < NELEMS(gRfuLinkStatus->partner) && gRfuLinkStatus->partner[i].id != r4; ++i)
+ for (i = 0; i < RFU_CHILD_MAX && gRfuLinkStatus->partner[i].id != pid; ++i)
;
if (i == 4)
r3 = 256;
if (r3 == 0)
{
- gRfuStatic->tryPid = r4;
+ gRfuStatic->tryPid = pid;
STWI_set_Callback_M(rfu_STC_REQ_callback);
- STWI_send_CP_StartREQ(r4);
+ STWI_send_CP_StartREQ(pid);
}
else
{
@@ -689,9 +682,9 @@ static void rfu_CB_pollConnectParent(u8 sp24, u16 sp28)
gRfuLinkStatus->linkLossSlotFlag &= ~r2;
gRfuLinkStatus->my.id = id;
++gRfuLinkStatus->connCount;
- gRfuLinkStatus->connMode = 0;
+ gRfuLinkStatus->parentChild = 0;
gRfuStatic->flags |= 0x80;
- for (r5 = 0; r5 < NELEMS(gRfuLinkStatus->partner); ++r5)
+ for (r5 = 0; r5 < RFU_CHILD_MAX; ++r5)
{
if (gRfuLinkStatus->partner[r5].id == gRfuStatic->tryPid)
{
@@ -720,7 +713,7 @@ static void rfu_CB_pollConnectParent(u8 sp24, u16 sp28)
rfu_STC_REQ_callback(sp24, sp28);
}
-u16 rfu_getConnectParentStatus(u8 *status, u8 *r1)
+u16 rfu_getConnectParentStatus(u8 *status, u8 *connectSlotNo)
{
u8 r0, *r2;
@@ -730,7 +723,7 @@ u16 rfu_getConnectParentStatus(u8 *status, u8 *r1)
if (r0 <= 1)
{
r2 += 6;
- *r1 = r2[0];
+ *connectSlotNo = r2[0];
*status = r2[1];
return 0;
}
@@ -751,7 +744,7 @@ u16 rfu_syncVBlank(void)
s32 r5;
rfu_NI_checkCommFailCounter();
- if (gRfuLinkStatus->connMode == 0xFF)
+ if (gRfuLinkStatus->parentChild == 0xFF)
return 0;
if (gRfuStatic->nowWatchInterval != 0)
--gRfuStatic->nowWatchInterval;
@@ -781,26 +774,26 @@ u16 rfu_syncVBlank(void)
for (r4 = 0; r4 < 4; ++r4)
if ((r5 >> r4) & 1)
rfu_STC_removeLinkData(r4, 1);
- gRfuLinkStatus->connMode = 0xFF;
+ gRfuLinkStatus->parentChild = 0xFF;
return 1;
}
--gRfuStatic->watchdogTimer;
return 0;
}
-s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04)
+u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason, u8 *parentBmLinkRecoverySlot)
{
u8 sp08 = 0;
u8 sp0C = 0;
u8 i;
s32 sp10, sp14;
u8 *r2;
- u8 r9, r6, r3, r1, r0;
+ u8 r9, r6, r3, connSlotFlag, r0;
- *r8 = 0;
- *sp00 = 0;
- *sp04 = 0;
- if (gRfuLinkStatus->connMode == 0xFF || gRfuState->msMode == 0)
+ *bmLinkLossSlot = 0;
+ *linkLossReason = 0;
+ *parentBmLinkRecoverySlot = 0;
+ if (gRfuLinkStatus->parentChild == 0xFF || gRfuState->msMode == 0)
return 0;
if (gRfuStatic->flags & 4)
gRfuStatic->watchdogTimer = 360;
@@ -809,27 +802,27 @@ s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04)
gRfuStatic->nowWatchInterval = gRfuLinkStatus->watchInterval;
sp08 = 1;
}
- if ((u8)r5 == 41)
+ if ((u8)reqCommandId == 41)
{
u8 *r1 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data;
- *r8 = r1[4];
- *sp00 = r1[5];
- if (*sp00 == 1)
- *r8 = gRfuLinkStatus->connSlotFlag;
+ *bmLinkLossSlot = r1[4];
+ *linkLossReason = r1[5];
+ if (*linkLossReason == 1)
+ *bmLinkLossSlot = gRfuLinkStatus->connSlotFlag;
sp08 = 2;
}
else
{
- if (r5 == 310)
+ if (reqCommandId == 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)
+ *bmLinkLossSlot = r6 & gRfuLinkStatus->connSlotFlag;
+ *linkLossReason = 1;
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- if ((*r8 >> i) & 1)
+ if ((*bmLinkLossSlot >> i) & 1)
{
gRfuLinkStatus->strength[i] = 0;
rfu_STC_removeLinkData(i, 0);
@@ -847,7 +840,7 @@ s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04)
if (sp0C == 0)
{
r2 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
- for (i = 0; i < NELEMS(gRfuLinkStatus->strength); ++i)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
gRfuLinkStatus->strength[i] = *r2++;
r9 = 0;
i = 0;
@@ -866,13 +859,13 @@ s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04)
{
if (gRfuLinkStatus->strength[i] == 0)
{
- if (gRfuLinkStatus->connMode == 1)
+ if (gRfuLinkStatus->parentChild == 1)
{
++gRfuStatic->linkEmergencyFlag[i];
if (gRfuStatic->linkEmergencyFlag[i] > 3)
{
- *r8 |= r6;
- *sp00 = sp08; // why not directly use 1?
+ *bmLinkLossSlot |= r6;
+ *linkLossReason = sp08; // why not directly use 1?
}
}
else
@@ -882,8 +875,8 @@ s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04)
{
if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0)
{
- *r8 |= r6;
- *sp00 = sp08;
+ *bmLinkLossSlot |= r6;
+ *linkLossReason = sp08;
}
else
{
@@ -892,8 +885,8 @@ s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04)
gRfuStatic->linkEmergencyFlag[i] = 0;
STWI_send_DisconnectREQ(gRfuLinkStatus->connSlotFlag);
STWI_poll_CommandEnd();
- *r8 |= r6;
- *sp00 = sp08; // why not directly use 1?
+ *bmLinkLossSlot |= r6;
+ *linkLossReason = sp08; // why not directly use 1?
}
}
}
@@ -904,13 +897,13 @@ s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04)
gRfuStatic->linkEmergencyFlag[i] = sp0C; // why not directly use 0?
}
}
- if (gRfuLinkStatus->connMode == 1 && gRfuLinkStatus->strength[i] != 0)
+ if (gRfuLinkStatus->parentChild == 1 && gRfuLinkStatus->strength[i] != 0)
{
if (r6 & gRfuLinkStatus->linkLossSlotFlag)
{
if (gRfuLinkStatus->strength[i] > 10)
{
- *sp04 |= r6;
+ *parentBmLinkRecoverySlot |= r6;
gRfuLinkStatus->connSlotFlag |= r6;
gRfuLinkStatus->linkLossSlotFlag &= ~r6;
++gRfuLinkStatus->connCount;
@@ -943,9 +936,9 @@ s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04)
}
}
}
- r1 = gRfuLinkStatus->connSlotFlag;
- r0 = *r8;
- r0 &= r1;
+ connSlotFlag = gRfuLinkStatus->connSlotFlag;
+ r0 = *bmLinkLossSlot;
+ r0 &= connSlotFlag;
if (r6 & r0)
rfu_STC_removeLinkData(i, 0);
}
@@ -971,7 +964,7 @@ static void rfu_STC_removeLinkData(u8 r7, u8 r12)
gRfuLinkStatus->connSlotFlag &= r6 = ~r5;
gRfuLinkStatus->linkLossSlotFlag |= r5;
if ((*(u32 *)gRfuLinkStatus & 0xFF00FF) == 0)
- gRfuLinkStatus->connMode = 0xFF;
+ gRfuLinkStatus->parentChild = 0xFF;
if (r12 != 0)
{
CpuFill16(0, &gRfuLinkStatus->partner[r7], sizeof(struct RfuTgtData));
@@ -981,16 +974,16 @@ static void rfu_STC_removeLinkData(u8 r7, u8 r12)
}
}
-void rfu_REQ_disconnect(u8 who)
+void rfu_REQ_disconnect(u8 bmDisconnectSlot)
{
u16 r1;
- if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & who)
+ if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & bmDisconnectSlot)
{
- gRfuStatic->recoveryBmSlot = who;
- if (gRfuLinkStatus->connMode == 0xFF && gRfuStatic->flags & 0x80)
+ gRfuStatic->recoveryBmSlot = bmDisconnectSlot;
+ if (gRfuLinkStatus->parentChild == 0xFF && gRfuStatic->flags & 0x80)
{
- if (gRfuLinkStatus->linkLossSlotFlag & who)
+ if (gRfuLinkStatus->linkLossSlotFlag & bmDisconnectSlot)
rfu_CB_disconnect(48, 0);
}
else if (gRfuStatic->SCStartFlag
@@ -1003,7 +996,7 @@ void rfu_REQ_disconnect(u8 who)
else
{
STWI_set_Callback_M(rfu_CB_disconnect);
- STWI_send_DisconnectREQ(who);
+ STWI_send_DisconnectREQ(bmDisconnectSlot);
}
}
}
@@ -1012,7 +1005,7 @@ static void rfu_CB_disconnect(u8 r6, u16 r5)
{
u8 r4, r0;
- if (r5 == 3 && gRfuLinkStatus->connMode == 0)
+ if (r5 == 3 && gRfuLinkStatus->parentChild == 0)
{
STWI_set_Callback_M(rfu_CB_defaultCallback);
STWI_send_SystemStatusREQ();
@@ -1031,7 +1024,7 @@ static void rfu_CB_disconnect(u8 r6, u16 r5)
}
}
if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) == 0)
- gRfuLinkStatus->connMode = 0xFF;
+ gRfuLinkStatus->parentChild = 0xFF;
rfu_STC_REQ_callback(r6, r5);
if (gRfuStatic->SCStartFlag)
{
@@ -1043,16 +1036,16 @@ static void rfu_CB_disconnect(u8 r6, u16 r5)
}
}
-void rfu_REQ_CHILD_startConnectRecovery(u8 r5)
+void rfu_REQ_CHILD_startConnectRecovery(u8 bmRecoverySlot)
{
u8 i;
- gRfuStatic->recoveryBmSlot = r5;
- for (i = 0; i < 4 && !((r5 >> i) & 1); ++i)
+ gRfuStatic->recoveryBmSlot = bmRecoverySlot;
+ for (i = 0; i < 4 && !((bmRecoverySlot >> 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);
+ STWI_send_CPR_StartREQ(gRfuLinkStatus->partner[i].id, gRfuLinkStatus->my.id, bmRecoverySlot);
}
void rfu_REQ_CHILD_pollConnectRecovery(void)
@@ -1068,7 +1061,7 @@ static void rfu_CB_CHILD_pollConnectRecovery(u8 r8, u16 r7)
if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] == 0 && gRfuStatic->recoveryBmSlot)
{
- gRfuLinkStatus->connMode = 0;
+ gRfuLinkStatus->parentChild = 0;
for (r4 = 0; r4 < NELEMS(gRfuStatic->linkEmergencyFlag); ++r4)
{
r3 = 1 << r4;
@@ -1154,10 +1147,10 @@ void rfu_clearAllSlot(void)
u16 IMEBackup = REG_IME;
REG_IME = 0;
- for (i = 0; i < NELEMS(gRfuSlotStatusNI); ++i)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- CpuFill16(0, gRfuSlotStatusNI[i], sizeof(gRfuSlotStatusNI[i]->sub));
- CpuFill16(0, gRfuSlotStatusUNI[i], sizeof(gRfuSlotStatusUNI[i]->sub));
+ CpuFill16(0, gRfuSlotStatusNI[i], 2 * sizeof(struct NIComm));
+ CpuFill16(0, gRfuSlotStatusUNI[i], sizeof(struct UNISend) + sizeof(struct UNIRecv));
gRfuLinkStatus->remainLLFrameSizeChild[i] = 16;
}
gRfuLinkStatus->remainLLFrameSizeParent = 87;
@@ -1185,43 +1178,43 @@ static void rfu_STC_releaseFrame(u8 r5, u8 r3, struct NIComm *r4)
}
}
-s32 rfu_clearSlot(u8 r8, u8 r7)
+u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex)
{
u16 r10, r3, r1;
struct NIComm *r4;
- if (r7 > 3)
+ if (slotStatusIndex >= RFU_CHILD_MAX)
return 0x400;
- if ((r8 & 0xF) == 0)
+ if ((connTypeFlag & 0xF) == 0)
return 0x600;
r10 = REG_IME;
REG_IME = 0;
- if (r8 & 0xC)
+ if (connTypeFlag & 0xC)
{
for (r3 = 0; r3 < 2; ++r3)
{
r4 = NULL;
if (r3 == 0)
{
- if (r8 & 4)
+ if (connTypeFlag & 4)
{
- r4 = &gRfuSlotStatusNI[r7]->sub.send;
+ r4 = &gRfuSlotStatusNI[slotStatusIndex]->send;
gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlotOrg;
}
}
else
{
- if (r8 & 8)
+ if (connTypeFlag & 8)
{
- r4 = &gRfuSlotStatusNI[r7]->sub.recv;
- gRfuLinkStatus->recvSlotNIFlag &= ~(1 << r7);
+ r4 = &gRfuSlotStatusNI[slotStatusIndex]->recv;
+ gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex);
}
}
if (r4 != NULL)
{
if (r4->state & 0x8000)
{
- rfu_STC_releaseFrame(r7, r3, r4);
+ rfu_STC_releaseFrame(slotStatusIndex, r3, r4);
for (r1 = 0; r1 < 4; ++r1)
if ((r4->bmSlotOrg >> r1) & 1)
r4->failCounter = 0;
@@ -1230,71 +1223,71 @@ s32 rfu_clearSlot(u8 r8, u8 r7)
}
}
}
- if (r8 & 1)
+ if (connTypeFlag & 1)
{
- struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[r7];
+ struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[slotStatusIndex];
- if (r3->sub.send.state & 0x8000)
+ if (r3->send.state & 0x8000)
{
if (!(gRfuStatic->flags & 0x80))
- gRfuLinkStatus->remainLLFrameSizeParent += 3 + (u8)r3->sub.send.payloadSize;
+ gRfuLinkStatus->remainLLFrameSizeParent += 3 + (u8)r3->send.payloadSize;
else
- gRfuLinkStatus->remainLLFrameSizeChild[r7] += 2 + (u8)r3->sub.send.payloadSize;
- gRfuLinkStatus->sendSlotUNIFlag &= ~r3->sub.send.bmSlot;
+ gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] += 2 + (u8)r3->send.payloadSize;
+ gRfuLinkStatus->sendSlotUNIFlag &= ~r3->send.bmSlot;
}
- CpuFill16(0, &r3->sub.send, sizeof(struct UNISend));
+ CpuFill16(0, &r3->send, sizeof(struct UNISend));
}
- if (r8 & 2)
+ if (connTypeFlag & 2)
{
- CpuFill16(0, &gRfuSlotStatusUNI[r7]->sub.recv, sizeof(struct UNIRecv));
+ CpuFill16(0, &gRfuSlotStatusUNI[slotStatusIndex]->recv, sizeof(struct UNIRecv));
}
REG_IME = r10;
return 0;
}
-s32 rfu_setRecvBuffer(u8 r3, u8 r4, void *r5, size_t r6)
+u16 rfu_setRecvBuffer(u8 connType, u8 slotNo, void *buffer, u32 buffSize)
{
- if (r4 > 3)
+ if (slotNo >= RFU_CHILD_MAX)
return 0x400;
- if (r3 & 0x20)
+ if (connType & 0x20)
{
- gRfuSlotStatusNI[r4]->recvBuffer = r5;
- gRfuSlotStatusNI[r4]->recvBufferSize = r6;
+ gRfuSlotStatusNI[slotNo]->recvBuffer = buffer;
+ gRfuSlotStatusNI[slotNo]->recvBufferSize = buffSize;
}
- else if (!(r3 & 0x10))
+ else if (!(connType & 0x10))
{
return 0x600;
}
else
{
- gRfuSlotStatusUNI[r4]->recvBuffer = r5;
- gRfuSlotStatusUNI[r4]->recvBufferSize = r6;
+ gRfuSlotStatusUNI[slotNo]->recvBuffer = buffer;
+ gRfuSlotStatusUNI[slotNo]->recvBufferSize = buffSize;
}
return 0;
}
-s32 rfu_NI_setSendData(u8 a1, u8 a2, const void *a3, u32 a4)
+u16 rfu_NI_setSendData(u8 bmSendSlot, u8 subFrameSize, const void *src, u32 size)
{
- return rfu_STC_setSendData_org(32, a1, a2, a3, a4);
+ return rfu_STC_setSendData_org(32, bmSendSlot, subFrameSize, src, size);
}
-s32 rfu_UNI_setSendData(u8 flag, const void *ptr, u8 size)
+u16 rfu_UNI_setSendData(u8 bmSendSlot, const void *src, u8 size)
{
- u8 r0;
+ u8 subFrameSize;
- if (gRfuLinkStatus->connMode == 1)
- r0 = size + 3;
+ if (gRfuLinkStatus->parentChild == 1)
+ subFrameSize = size + 3;
else
- r0 = size + 2;
- return rfu_STC_setSendData_org(16, flag, r0, ptr, 0);
+ subFrameSize = size + 2;
+ return rfu_STC_setSendData_org(16, bmSendSlot, subFrameSize, src, 0);
}
-s32 rfu_NI_CHILD_setSendGameName(u8 a1, u8 a2)
+u16 rfu_NI_CHILD_setSendGameName(u8 slotNo, u8 subFrameSize)
{
- return rfu_STC_setSendData_org(64, 1 << a1, a2, &gRfuLinkStatus->my.serialNum, 26);
+ return rfu_STC_setSendData_org(64, 1 << slotNo, subFrameSize, &gRfuLinkStatus->my.serialNo, 26);
}
-static u16 rfu_STC_setSendData_org(u8 r6, u8 r3, u8 r8, const void *sp00, u32 sp28)
+static u16 rfu_STC_setSendData_org(u8 r6, u8 bmSendSlot, u8 subFrameSize, const void *src, u32 sp28)
{
u8 r2, r0;
u8 r4;
@@ -1305,26 +1298,26 @@ static u16 rfu_STC_setSendData_org(u8 r6, u8 r3, u8 r8, const void *sp00, u32 sp
struct RfuSlotStatusUNI *r1;
struct RfuSlotStatusNI *r12;
- if (gRfuLinkStatus->connMode == 0xFF)
+ if (gRfuLinkStatus->parentChild == 0xFF)
return 0x301;
- if (!(r3 & 0xF))
+ if (!(bmSendSlot & 0xF))
return 0x400;
- if (((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & r3) != r3)
+ if (((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & bmSendSlot) != bmSendSlot)
return 0x401;
if (r6 & 0x10)
r0 = gRfuLinkStatus->sendSlotUNIFlag;
else
r0 = gRfuLinkStatus->sendSlotNIFlag;
- if (r0 & r3)
+ if (r0 & bmSendSlot)
return 0x402;
- for (r2 = 0; r2 < 4 && !((r3 >> r2) & 1); ++r2)
+ for (r2 = 0; r2 < 4 && !((bmSendSlot >> r2) & 1); ++r2)
;
- if (gRfuLinkStatus->connMode == 1)
+ if (gRfuLinkStatus->parentChild == 1)
r9 = &gRfuLinkStatus->remainLLFrameSizeParent;
- else if (gRfuLinkStatus->connMode == 0)
+ else if (gRfuLinkStatus->parentChild == 0)
r9 = &gRfuLinkStatus->remainLLFrameSizeChild[r2];
- r4 = _Str_RfuHeader[gRfuLinkStatus->connMode].unk00;
- if (r8 > *r9 || r8 <= r4)
+ r4 = _Str_RfuHeader[gRfuLinkStatus->parentChild].unk00;
+ if (subFrameSize > *r9 || subFrameSize <= r4)
return 0x500;
sp04 = REG_IME;
REG_IME = 0;
@@ -1335,82 +1328,82 @@ static u16 rfu_STC_setSendData_org(u8 r6, u8 r3, u8 r8, const void *sp00, u32 sp
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;
+ r12->send.errorCode = 0;
+ *r12->send.now_p = r1 = &r12->send.dataType;
+ r12->send.remainSize = 7;
+ r12->send.bmSlotOrg = bmSendSlot;
+ r12->send.bmSlot = bmSendSlot;
+ r12->send.payloadSize = subFrameSize - 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;
+ r12->send.dataSize = sp28;
+ r12->send.src = src;
+ r12->send.ack = 0;
+ r12->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)
+ for (i = 0; i < WINDOW_COUNT; ++i)
{
- r12->sub.send.recvAckFlag[i] = 0;
- r12->sub.send.n[i] = 1;
+ r12->send.recvAckFlag[i] = 0;
+ r12->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;
+ for (r2 = 0; r2 < RFU_CHILD_MAX; ++r2)
+ if ((bmSendSlot >> r2) & 1)
+ gRfuSlotStatusNI[r2]->send.failCounter = 0;
+ gRfuLinkStatus->sendSlotNIFlag |= bmSendSlot;
+ *r9 -= subFrameSize;
+ r12->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;
+ r1->send.bmSlot = bmSendSlot;
+ r1->send.src = src;
+ r1->send.payloadSize = subFrameSize - r4;
+ *r9 -= subFrameSize;
+ r1->send.state = 0x8024;
+ gRfuLinkStatus->sendSlotUNIFlag |= bmSendSlot;
}
REG_IME = sp04;
return 0;
}
-s32 rfu_changeSendTarget(u8 r3, u8 r7, u8 r6)
+u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot)
{
struct RfuSlotStatusNI *r5;
u16 r8;
u8 r2;
- if (r7 >= NELEMS(gRfuSlotStatusNI))
+ if (slotStatusIndex >= RFU_CHILD_MAX)
return 0x400;
- if (r3 == 0x20)
+ if (connType == 0x20)
{
- r5 = gRfuSlotStatusNI[r7];
- if ((r5->sub.send.state & 0x8000)
- && (r5->sub.send.state & 0x20))
+ r5 = gRfuSlotStatusNI[slotStatusIndex];
+ if ((r5->send.state & 0x8000)
+ && (r5->send.state & 0x20))
{
- r3 = r6 ^ r5->sub.send.bmSlot;
+ connType = bmNewTgtSlot ^ r5->send.bmSlot;
- if (!(r3 & r6))
+ if (!(connType & bmNewTgtSlot))
{
- if (r3)
+ if (connType)
{
r8 = REG_IME;
REG_IME = 0;
- for (r2 = 0; r2 < NELEMS(gRfuSlotStatusNI); ++r2)
+ for (r2 = 0; r2 < RFU_CHILD_MAX; ++r2)
{
- if ((r3 >> r2) & 1)
- gRfuSlotStatusNI[r2]->sub.send.failCounter = 0;
+ if ((connType >> r2) & 1)
+ gRfuSlotStatusNI[r2]->send.failCounter = 0;
}
- gRfuLinkStatus->sendSlotNIFlag &= ~r3;
- r5->sub.send.bmSlot = r6;
- if (r5->sub.send.bmSlot == 0)
+ gRfuLinkStatus->sendSlotNIFlag &= ~connType;
+ r5->send.bmSlot = bmNewTgtSlot;
+ if (r5->send.bmSlot == 0)
{
- rfu_STC_releaseFrame(r7, 0, &r5->sub.send);
- r5->sub.send.state = 39;
+ rfu_STC_releaseFrame(slotStatusIndex, 0, &r5->send);
+ r5->send.state = 39;
}
REG_IME = r8;
}
@@ -1427,22 +1420,22 @@ s32 rfu_changeSendTarget(u8 r3, u8 r7, u8 r6)
}
else
{
- if (r3 == 16)
+ if (connType == 16)
{
s32 r3;
- if (gRfuSlotStatusUNI[r7]->sub.send.state != 0x8024)
+ if (gRfuSlotStatusUNI[slotStatusIndex]->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)
+ for (r3 = 0, r2 = 0; r2 < RFU_CHILD_MAX; ++r2)
+ if (r2 != slotStatusIndex)
+ r3 |= gRfuSlotStatusUNI[r2]->send.bmSlot;
+ if (bmNewTgtSlot & 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;
+ gRfuLinkStatus->sendSlotUNIFlag &= ~gRfuSlotStatusUNI[slotStatusIndex]->send.bmSlot;
+ gRfuLinkStatus->sendSlotUNIFlag |= bmNewTgtSlot;
+ gRfuSlotStatusUNI[slotStatusIndex]->send.bmSlot = bmNewTgtSlot;
REG_IME = r8;
}
else
@@ -1453,84 +1446,84 @@ s32 rfu_changeSendTarget(u8 r3, u8 r7, u8 r6)
return 0;
}
-s32 rfu_NI_stopReceivingData(u8 who)
+u16 rfu_NI_stopReceivingData(u8 slotStatusIndex)
{
struct NIComm *r5;
u16 r4, r1;
- if (who > 3)
+ if (slotStatusIndex > 3)
return 0x400;
- r5 = &gRfuSlotStatusNI[who]->sub.recv;
+ r5 = &gRfuSlotStatusNI[slotStatusIndex]->recv;
r4 = REG_IME;
++r4; --r4; // fix r4, r5 register swap
REG_IME = 0;
- if (gRfuSlotStatusNI[who]->sub.recv.state & 0x8000)
+ if (gRfuSlotStatusNI[slotStatusIndex]->recv.state & 0x8000)
{
- if (gRfuSlotStatusNI[who]->sub.recv.state == 0x8043)
- gRfuSlotStatusNI[who]->sub.recv.state = 72;
+ if (gRfuSlotStatusNI[slotStatusIndex]->recv.state == 0x8043)
+ gRfuSlotStatusNI[slotStatusIndex]->recv.state = 72;
else
- gRfuSlotStatusNI[who]->sub.recv.state = 71;
- gRfuLinkStatus->recvSlotNIFlag &= ~(1 << who);
- rfu_STC_releaseFrame(who, 1, r5);
+ gRfuSlotStatusNI[slotStatusIndex]->recv.state = 71;
+ gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex);
+ rfu_STC_releaseFrame(slotStatusIndex, 1, r5);
}
REG_IME = r4;
return 0;
}
-s32 rfu_UNI_changeAndReadySendData(u8 r3, const void *r7, u8 r5)
+u16 rfu_UNI_changeAndReadySendData(u8 slotStatusIndex, const void *src, u8 size)
{
struct UNISend *r4;
u8 *r6;
u16 r1;
u8 r3_;
- if (r3 >= 4)
+ if (slotStatusIndex >= RFU_CHILD_MAX)
return 0x400;
- r4 = &gRfuSlotStatusUNI[r3]->sub.send;
+ r4 = &gRfuSlotStatusUNI[slotStatusIndex]->send;
if (r4->state != 0x8024)
return 0x403;
- if (gRfuLinkStatus->connMode == 1)
+ if (gRfuLinkStatus->parentChild == 1)
{
r6 = &gRfuLinkStatus->remainLLFrameSizeParent;
r3_ = gRfuLinkStatus->remainLLFrameSizeParent + (u8)r4->payloadSize;
}
else
{
- r6 = &gRfuLinkStatus->remainLLFrameSizeChild[r3];
- r3_ = gRfuLinkStatus->remainLLFrameSizeChild[r3] + (u8)r4->payloadSize;
+ r6 = &gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex];
+ r3_ = gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] + (u8)r4->payloadSize;
}
- if (r3_ < r5)
+ if (r3_ < size)
return 0x500;
r1 = REG_IME;
REG_IME = 0;
- r4->src = r7;
- *r6 = r3_ - r5;
- r4->payloadSize = r5;
+ r4->src = src;
+ *r6 = r3_ - size;
+ r4->payloadSize = size;
r4->dataReadyFlag = 1;
REG_IME = r1;
return 0;
}
-void rfu_UNI_readySendData(u8 a1)
+void rfu_UNI_readySendData(u8 slotStatusIndex)
{
- if (a1 < NELEMS(gRfuSlotStatusUNI))
+ if (slotStatusIndex < RFU_CHILD_MAX)
{
- if (gRfuSlotStatusUNI[a1]->sub.send.state == 0x8024)
- gRfuSlotStatusUNI[a1]->sub.send.dataReadyFlag = 1;
+ if (gRfuSlotStatusUNI[slotStatusIndex]->send.state == 0x8024)
+ gRfuSlotStatusUNI[slotStatusIndex]->send.dataReadyFlag = 1;
}
}
-void rfu_UNI_clearRecvNewDataFlag(u8 a1)
+void rfu_UNI_clearRecvNewDataFlag(u8 slotStatusIndex)
{
- if (a1 < NELEMS(gRfuSlotStatusUNI))
- gRfuSlotStatusUNI[a1]->sub.recv.newDataFlag = 0;
+ if (slotStatusIndex < RFU_CHILD_MAX)
+ gRfuSlotStatusUNI[slotStatusIndex]->recv.newDataFlag = 0;
}
-void rfu_REQ_sendData(u8 r5)
+void rfu_REQ_sendData(u8 clockChangeFlag)
{
- if (gRfuLinkStatus->connMode != 0xFF)
+ if (gRfuLinkStatus->parentChild != 0xFF)
{
- if (gRfuLinkStatus->connMode == 1
+ if (gRfuLinkStatus->parentChild == 1
&& !(gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag))
{
if (gRfuStatic->commExistFlag)
@@ -1548,7 +1541,7 @@ void rfu_REQ_sendData(u8 r5)
gRfuFixed->LLFBuffer[0] = 1;
gRfuFixed->LLFBuffer[4] = 0xFF;
STWI_set_Callback_M(rfu_CB_sendData3);
- if (r5 == 0)
+ if (clockChangeFlag == 0)
STWI_send_DataTxREQ(gRfuFixed->LLFBuffer, 1);
else
STWI_send_DataTxAndChangeREQ(gRfuFixed->LLFBuffer, 1);
@@ -1562,7 +1555,7 @@ void rfu_REQ_sendData(u8 r5)
if (gRfuLinkStatus->LLFReadyFlag)
{
STWI_set_Callback_M(rfu_CB_sendData);
- if (r5 != 0)
+ if (clockChangeFlag != 0)
{
STWI_send_DataTxAndChangeREQ(gRfuFixed->LLFBuffer, gRfuStatic->totalPacketSize + 4);
return;
@@ -1570,9 +1563,9 @@ void rfu_REQ_sendData(u8 r5)
STWI_send_DataTxREQ(gRfuFixed->LLFBuffer, gRfuStatic->totalPacketSize + 4);
}
}
- if (r5 != 0)
+ if (clockChangeFlag != 0)
{
- if (gRfuLinkStatus->connMode == 1)
+ if (gRfuLinkStatus->parentChild == 1)
{
if (gRfuState->callbackS != NULL)
gRfuState->callbackS(39);
@@ -1593,11 +1586,11 @@ static void rfu_CB_sendData(UNUSED u8 r0, u16 r7)
if (r7 == 0)
{
- for (r6 = 0; r6 < NELEMS(gRfuSlotStatusNI); ++r6)
+ for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6)
{
- if (gRfuSlotStatusUNI[r6]->sub.send.dataReadyFlag)
- gRfuSlotStatusUNI[r6]->sub.send.dataReadyFlag = 0;
- r4 = &gRfuSlotStatusNI[r6]->sub.send;
+ if (gRfuSlotStatusUNI[r6]->send.dataReadyFlag)
+ gRfuSlotStatusUNI[r6]->send.dataReadyFlag = 0;
+ r4 = &gRfuSlotStatusNI[r6]->send;
if (r4->state == 0x8020)
{
rfu_STC_releaseFrame(r6, 0, r4);
@@ -1632,24 +1625,24 @@ static void rfu_constructSendLLFrame(void)
u8 *sp00;
struct RfuSlotStatusNI *r2;
- if (gRfuLinkStatus->connMode != 0xFF
+ if (gRfuLinkStatus->parentChild != 0xFF
&& gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag)
{
gRfuLinkStatus->LLFReadyFlag = 0;
r8 = 0;
sp00 = (u8 *)&gRfuFixed->LLFBuffer[1];
- for (r6 = 0; r6 < NELEMS(gRfuSlotStatusUNI); ++r6)
+ for (r6 = 0; r6 < RFU_CHILD_MAX; ++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)
+ if (gRfuSlotStatusNI[r6]->send.state & 0x8000)
+ r5 = rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->send);
+ if (gRfuSlotStatusNI[r6]->recv.state & 0x8000)
+ r5 += rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->recv);
+ if (gRfuSlotStatusUNI[r6]->send.state == 0x8024)
r5 += rfu_STC_UNI_constructLLSF(r6, &sp00);
if (r5 != 0)
{
- if (gRfuLinkStatus->connMode == 1)
+ if (gRfuLinkStatus->parentChild == 1)
r8 += r5;
else
r8 |= r5 << (5 * r6 + 8);
@@ -1660,7 +1653,7 @@ static void rfu_constructSendLLFrame(void)
while ((u32)sp00 & 3)
*sp00++ = 0;
gRfuFixed->LLFBuffer[0] = r8;
- if (gRfuLinkStatus->connMode == 0)
+ if (gRfuLinkStatus->parentChild == 0)
{
u8 *r0 = sp00 - offsetof(struct RfuFixed, LLFBuffer[1]);
@@ -1680,11 +1673,11 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4)
u32 sp00;
u8 i;
u8 *r2;
- const struct RfuHeader *r8 = &_Str_RfuHeader[gRfuLinkStatus->connMode];
+ const struct RfuHeader *r8 = &_Str_RfuHeader[gRfuLinkStatus->parentChild];
if (r4->state == 0x8022)
{
- while (r4->nowP[r4->phase] >= (const u8 *)r4->src + r4->dataSize)
+ while (r4->now_p[r4->phase] >= (const u8 *)r4->src + r4->dataSize)
{
++r4->phase;
if (r4->phase == 4)
@@ -1697,8 +1690,8 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4)
}
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];
+ 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];
else
r5 = r4->payloadSize;
}
@@ -1714,14 +1707,14 @@ 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->connMode == 1)
+ if (gRfuLinkStatus->parentChild == 1)
sp00 |= r4->bmSlot << 18;
r2 = (u8 *)&sp00;
for (i = 0; i < r8->unk00; ++i)
*(*r12)++ = *r2++;
if (r5 != 0)
{
- const u8 *sp04 = r4->nowP[r4->phase];
+ const u8 *sp04 = r4->now_p[r4->phase];
gRfuFixed->fastCopyPtr(&sp04, r12, r5);
}
@@ -1731,7 +1724,7 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4)
if (r4->phase == 4)
r4->phase = 0;
}
- if (gRfuLinkStatus->connMode == 1)
+ if (gRfuLinkStatus->parentChild == 1)
gRfuLinkStatus->LLFReadyFlag = 1;
else
gRfuLinkStatus->LLFReadyFlag |= 1 << r10;
@@ -1745,21 +1738,21 @@ static u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6)
u32 sp00;
u8 *r2;
u8 i;
- struct UNISend *r4 = &gRfuSlotStatusUNI[r8]->sub.send;
+ struct UNISend *r4 = &gRfuSlotStatusUNI[r8]->send;
if (!r4->dataReadyFlag || !r4->bmSlot)
return 0;
- r5 = &_Str_RfuHeader[gRfuLinkStatus->connMode];
+ r5 = &_Str_RfuHeader[gRfuLinkStatus->parentChild];
sp00 = (r4->state & 0xF) << r5->unk03
| r4->payloadSize;
- if (gRfuLinkStatus->connMode == 1)
+ if (gRfuLinkStatus->parentChild == 1)
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->connMode == 1)
+ if (gRfuLinkStatus->parentChild == 1)
gRfuLinkStatus->LLFReadyFlag = 16;
else
gRfuLinkStatus->LLFReadyFlag |= 16 << r8;
@@ -1768,7 +1761,7 @@ static u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6)
void rfu_REQ_recvData(void)
{
- if (gRfuLinkStatus->connMode != 0xFF)
+ if (gRfuLinkStatus->parentChild != 0xFF)
{
gRfuStatic->commExistFlag = gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag;
gRfuStatic->recvErrorFlag = 0;
@@ -1786,21 +1779,21 @@ static void rfu_CB_recvData(u8 r9, u16 r7)
if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1])
{
gRfuStatic->NIEndRecvFlag = 0;
- if (gRfuLinkStatus->connMode == 1)
+ if (gRfuLinkStatus->parentChild == 1)
rfu_STC_PARENT_analyzeRecvPacket();
else
rfu_STC_CHILD_analyzeRecvPacket();
- for (r6 = 0; r6 < NELEMS(gRfuSlotStatusNI); ++r6)
+ for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6)
{
r4 = gRfuSlotStatusNI[r6];
- if (r4->sub.recv.state == 0x8043 && !((gRfuStatic->NIEndRecvFlag >> r6) & 1))
+ if (r4->recv.state == 0x8043 && !((gRfuStatic->NIEndRecvFlag >> r6) & 1))
{
- r5 = &r4->sub.recv;
+ r5 = &r4->recv;
if (r5->dataType == 1)
gRfuLinkStatus->getNameFlag |= 1 << r6;
rfu_STC_releaseFrame(r6, 1, r5);
gRfuLinkStatus->recvSlotNIFlag &= ~r5->bmSlot;
- r4->sub.recv.state = 70;
+ r4->recv.state = 70;
}
}
if (gRfuStatic->recvErrorFlag)
@@ -1871,7 +1864,7 @@ static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3)
u32 r0;
u16 r10;
- r6 = &_Str_RfuHeader[~gRfuLinkStatus->connMode & 1];
+ r6 = &_Str_RfuHeader[~gRfuLinkStatus->parentChild & 1];
if (r3 < r6->unk00)
return r3;
r5 = 0;
@@ -1887,7 +1880,7 @@ static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3)
r10 = sp00.unk06 + r6->unk00;
if (sp00.unk00 == 0)
{
- if (gRfuLinkStatus->connMode == 1)
+ if (gRfuLinkStatus->parentChild == 1)
{
if ((gRfuLinkStatus->connSlotFlag >> r12) & 1)
{
@@ -1901,8 +1894,8 @@ static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3)
}
else
{
- for (r4 = 0; r4 < NELEMS(gRfuSlotStatusNI); ++r4)
- if (((gRfuSlotStatusNI[r4]->sub.send.bmSlot >> r12) & 1)
+ for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4)
+ if (((gRfuSlotStatusNI[r4]->send.bmSlot >> r12) & 1)
&& ((gRfuLinkStatus->sendSlotNIFlag >> r12) & 1))
break;
if (r4 <= 3)
@@ -1939,12 +1932,12 @@ static void rfu_STC_UNI_receive(u8 r7, const struct RfuLocalStruct *r6, const u8
u8 *sp04;
u32 r2;
struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[r7];
- struct UNIRecv *r5 = &r3->sub.recv;
+ struct UNIRecv *r5 = &r3->recv;
r5->errorCode = 0;
if (gRfuSlotStatusUNI[r7]->recvBufferSize < r6->unk06)
{
- r3->sub.recv.state = 73;
+ r3->recv.state = 73;
r5->errorCode = 0x701;
}
else
@@ -1976,7 +1969,7 @@ _081E2F0E:
static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct *r6, const u8 *r3)
{
- struct NIComm *r12 = &gRfuSlotStatusNI[r0]->sub.send;
+ struct NIComm *r12 = &gRfuSlotStatusNI[r0]->send;
u16 r9 = r12->state;
u8 sp00 = r12->n[r6->unk04];
u8 *r8;
@@ -1997,9 +1990,9 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct
if ((u16)(r12->state + ~0x8020) <= 1)
{
if (r12->state == 0x8021)
- r12->nowP[r6->unk04] += r12->payloadSize;
+ r12->now_p[r6->unk04] += r12->payloadSize;
else
- r12->nowP[r6->unk04] += r12->payloadSize << 2;
+ r12->now_p[r6->unk04] += r12->payloadSize << 2;
r12->remainSize -= r12->payloadSize;
if (r12->remainSize != 0)
if (r12->remainSize >= 0)
@@ -2012,10 +2005,10 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct
r12->phase = 0;
if (r12->state == 0x8021)
{
- for (r4 = 0; r4 < NELEMS(r12->n); ++r4)
+ for (r4 = 0; r4 < WINDOW_COUNT; ++r4)
{
r12->n[r4] = 1;
- r12->nowP[r4] = r12->src + r12->payloadSize * r4;
+ r12->now_p[r4] = r12->src + r12->payloadSize * r4;
}
r12->remainSize = r12->dataSize;
r12->state = 0x8022;
@@ -2041,7 +2034,7 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct
r2 = REG_IME;
REG_IME = 0;
gRfuStatic->recvRenewalFlag |= 16 << r10;
- gRfuSlotStatusNI[r10]->sub.send.failCounter = 0;
+ gRfuSlotStatusNI[r10]->send.failCounter = 0;
REG_IME = r2;
}
}
@@ -2051,18 +2044,18 @@ static void rfu_STC_NI_receive_Receiver(u8 r8, const struct RfuLocalStruct *r6,
u16 r2;
u32 r7 = 0;
struct RfuSlotStatusNI *r4 = gRfuSlotStatusNI[r8];
- struct NIComm *r5 = &r4->sub.recv;
- u16 r9 = r4->sub.recv.state;
- u8 r10 = r4->sub.recv.n[r6->unk04];
+ struct NIComm *r5 = &r4->recv;
+ u16 r9 = r4->recv.state;
+ u8 r10 = r4->recv.n[r6->unk04];
if (r6->unk02 == 3)
{
gRfuStatic->NIEndRecvFlag |= 1 << r8;
- if (r4->sub.recv.state == 0x8042)
+ if (r4->recv.state == 0x8042)
{
- r4->sub.recv.phase = 0;
- r4->sub.recv.n[0] = 0;
- r4->sub.recv.state = 0x8043;
+ r4->recv.phase = 0;
+ r4->recv.n[0] = 0;
+ r4->recv.state = 0x8043;
}
}
else if (r6->unk02 == 2)
@@ -2081,7 +2074,7 @@ static void rfu_STC_NI_receive_Receiver(u8 r8, const struct RfuLocalStruct *r6,
else
{
rfu_STC_NI_initSlot_asRecvControllData(r8, r5);
- if (r4->sub.recv.state != 0x8041)
+ if (r4->recv.state != 0x8041)
return;
r7 = 1;
}
@@ -2090,9 +2083,9 @@ 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->nowP[r6->unk04], r6->unk06);
+ gRfuFixed->fastCopyPtr(&sp00, (u8 **)&r5->now_p[r6->unk04], r6->unk06);
if (r5->state == 0x8042)
- r5->nowP[r6->unk04] += 3 * r5->payloadSize;
+ r5->now_p[r6->unk04] += 3 * r5->payloadSize;
r5->remainSize -= r6->unk06;
r5->n[r6->unk04] = r6->unk05;
}
@@ -2117,7 +2110,7 @@ static void rfu_STC_NI_initSlot_asRecvControllData(u8 r4, struct NIComm *r2)
u32 r5;
u8 r6;
- if (gRfuLinkStatus->connMode == 1)
+ if (gRfuLinkStatus->parentChild == 1)
{
r5 = 3;
r1 = &gRfuLinkStatus->remainLLFrameSizeParent;
@@ -2140,7 +2133,7 @@ static void rfu_STC_NI_initSlot_asRecvControllData(u8 r4, struct NIComm *r2)
{
r2->errorCode = 0;
*r1 -= r5;
- r2->nowP[0] = &r2->dataType;
+ r2->now_p[0] = &r2->dataType;
r2->remainSize = 7;
r2->ack = 1;
r2->payloadSize = 0;
@@ -2157,7 +2150,7 @@ static void rfu_STC_NI_initSlot_asRecvDataEntity(u8 r5, struct NIComm *r4)
if (r4->dataType == 1)
{
- r4->nowP[0] = (void *)&gRfuLinkStatus->partner[r5].serialNum;
+ r4->now_p[0] = (void *)&gRfuLinkStatus->partner[r5].serialNo;
}
else
{
@@ -2171,12 +2164,12 @@ static void rfu_STC_NI_initSlot_asRecvDataEntity(u8 r5, struct NIComm *r4)
rfu_STC_releaseFrame(r5, 1, r4);
return;
}
- r4->nowP[0] = gRfuSlotStatusNI[r5]->recvBuffer;
+ r4->now_p[0] = gRfuSlotStatusNI[r5]->recvBuffer;
}
for (r3 = 0; r3 < 4; ++r3)
{
r4->n[r3] = 0;
- r4->nowP[r3] = &r4->nowP[0][r4->payloadSize * r3];
+ r4->now_p[r3] = &r4->now_p[0][r4->payloadSize * r3];
}
r4->remainSize = r4->dataSize;
r4->state = 0x8042;
@@ -2193,15 +2186,15 @@ static void rfu_NI_checkCommFailCounter(void)
r12 = REG_IME;
REG_IME = 0;
r7 = gRfuStatic->recvRenewalFlag >> 4;
- for (r3 = 0; r3 < NELEMS(gRfuSlotStatusNI); ++r3)
+ for (r3 = 0; r3 < RFU_CHILD_MAX; ++r3)
{
r2 = 1 << r3;
if (gRfuLinkStatus->sendSlotNIFlag & r2
&& !(gRfuStatic->recvRenewalFlag & r2))
- ++gRfuSlotStatusNI[r3]->sub.send.failCounter;
+ ++gRfuSlotStatusNI[r3]->send.failCounter;
if (gRfuLinkStatus->recvSlotNIFlag & r2
&& !(r7 & r2))
- ++gRfuSlotStatusNI[r3]->sub.recv.failCounter;
+ ++gRfuSlotStatusNI[r3]->recv.failCounter;
}
gRfuStatic->recvRenewalFlag = 0;
REG_IME = r12;
@@ -2213,157 +2206,3 @@ void rfu_REQ_noise(void)
STWI_set_Callback_M(rfu_STC_REQ_callback);
STWI_send_TestModeREQ(1, 0);
}
-
-static s32 sub_81E349C(u8 r5)
-{
- u16 r8;
- vu16 *r4;
- s32 r6;
-
- if (REG_IME == 0)
- return -1;
- r8 = REG_IE;
- gRfuState->state = 10;
- STWI_set_Callback_ID(sub_81E36B8);
- sub_81E3550();
- r4 = &REG_TMCNT_L(gRfuState->timerSelect);
- r5 *= 8;
- while (--r5 != 0xFF)
- {
- r6 = sub_81E35C4();
- if (r6 != 0)
- break;
- r4[1] = 0;
- r4[0] = 0;
- r4[1] = TIMER_1024CLK | TIMER_ENABLE;
- while (r4[0] < 32)
- ;
- r4[1] = 0;
- r4[0] = 0;
- }
- REG_IME = 0;
- REG_IE = r8;
- REG_IME = 1;
- gRfuState->state = 0;
- STWI_set_Callback_ID(NULL);
- return r6;
-}
-
-static void sub_81E3550(void)
-{
- REG_IME = 0;
- REG_IE &= ~((8 << gRfuState->timerSelect) | INTR_FLAG_SERIAL);
- REG_IME = 1;
- REG_RCNT = 0;
- REG_SIOCNT = SIO_32BIT_MODE;
- REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE;
- CpuFill32(0, &gUnknown_3007470, sizeof(struct Unk_3007470));
- REG_IF = INTR_FLAG_SERIAL;
-}
-
-static s32 sub_81E35C4(void)
-{
- u8 r12;
-
- switch (r12 = gUnknown_3007470.unk1)
- {
- case 0:
- gUnknown_3007470.unk0 = 1;
- REG_SIOCNT |= SIO_38400_BPS;
- REG_IME = r12;
- REG_IE |= INTR_FLAG_SERIAL;
- REG_IME = 1;
- gUnknown_3007470.unk1 = 1;
- *(vu8 *)&REG_SIOCNT |= SIO_ENABLE;
- break;
- case 1:
- if (gUnknown_3007470.unkA == 0)
- {
- if (gUnknown_3007470.unk0 == 1)
- {
- if (gUnknown_3007470.unk2 == 0)
- {
- REG_IME = gUnknown_3007470.unk2;
- REG_SIOCNT |= SIO_ENABLE;
- REG_IME = r12;
- }
- }
- else if (gUnknown_3007470.unk4 != 0x8001 && !gUnknown_3007470.unk2)
- {
- REG_IME = gUnknown_3007470.unk2;
- REG_IE &= ~INTR_FLAG_SERIAL;
- REG_IME = r12;
- REG_SIOCNT = gUnknown_3007470.unk2;
- REG_SIOCNT = SIO_32BIT_MODE;
- REG_IF = INTR_FLAG_SERIAL;
- REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE;
- REG_IME = gUnknown_3007470.unk2;
- REG_IE |= INTR_FLAG_SERIAL;
- REG_IME = r12;
- }
- break;
- }
- else
- {
- gUnknown_3007470.unk1 = 2;
- // fallthrough
- }
- default:
- return gUnknown_3007470.unkA;
- }
- return 0;
-}
-
-static void sub_81E36B8(void)
-{
- u32 r5;
- u16 r0;
-#ifndef NONMATCHING
- register u32 r1 asm("r1");
- register u16 r0_ asm("r0");
-#else
- u32 r1;
- u16 r0_;
-#endif
-
- r5 = REG_SIODATA32;
- if (gUnknown_3007470.unk0 != 1)
- REG_SIOCNT |= SIO_ENABLE;
- r1 = 16 * gUnknown_3007470.unk0; // to handle side effect of inline asm
- r1 = (r5 << r1) >> 16;
- r5 = (r5 << 16 * (1 - gUnknown_3007470.unk0)) >> 16;
- if (gUnknown_3007470.unkA == 0)
- {
- if (r1 == gUnknown_3007470.unk6)
- {
- if (gUnknown_3007470.unk2 > 3)
- {
- gUnknown_3007470.unkA = r5;
- }
- else if (r1 == (u16)~gUnknown_3007470.unk4)
- {
- r0_ = ~gUnknown_3007470.unk6;
- if (r5 == r0_)
- ++gUnknown_3007470.unk2;
- }
- }
- else
- {
- gUnknown_3007470.unk2 = gUnknown_3007470.unkA;
- }
- }
- if (gUnknown_3007470.unk2 < 4)
- gUnknown_3007470.unk4 = *(gUnknown_3007470.unk2 + _Str_Sio32ID);
- else
- gUnknown_3007470.unk4 = 0x8001;
- gUnknown_3007470.unk6 = ~r5;
- REG_SIODATA32 = (gUnknown_3007470.unk4 << 16 * (1 - gUnknown_3007470.unk0))
- + (gUnknown_3007470.unk6 << 16 * gUnknown_3007470.unk0);
- if (gUnknown_3007470.unk0 == 1 && (gUnknown_3007470.unk2 || r5 == 0x494E))
- {
- for (r0 = 0; r0 < 600; ++r0)
- ;
- if (gUnknown_3007470.unkA == 0)
- REG_SIOCNT |= SIO_ENABLE;
- }
-}
diff --git a/src/librfu_s32id.c b/src/librfu_s32id.c
new file mode 100644
index 000000000..c3bb922e2
--- /dev/null
+++ b/src/librfu_s32id.c
@@ -0,0 +1,163 @@
+#include "librfu.h"
+
+extern const u16 _Str_Sio32ID[];
+
+static void Sio32IDIntr(void);
+static void Sio32IDInit(void);
+static s32 Sio32IDMain(void);
+
+struct RfuS32Id gRfuS32Id;
+
+s32 AgbRFU_checkID(u8 r5)
+{
+ u16 r8;
+ vu16 *r4;
+ s32 r6;
+
+ if (REG_IME == 0)
+ return -1;
+ r8 = REG_IE;
+ gRfuState->state = 10;
+ STWI_set_Callback_ID(Sio32IDIntr);
+ Sio32IDInit();
+ r4 = &REG_TMCNT_L(gRfuState->timerSelect);
+ r5 *= 8;
+ while (--r5 != 0xFF)
+ {
+ r6 = Sio32IDMain();
+ if (r6 != 0)
+ break;
+ r4[1] = 0;
+ r4[0] = 0;
+ r4[1] = TIMER_1024CLK | TIMER_ENABLE;
+ while (r4[0] < 32)
+ ;
+ r4[1] = 0;
+ r4[0] = 0;
+ }
+ REG_IME = 0;
+ REG_IE = r8;
+ REG_IME = 1;
+ gRfuState->state = 0;
+ STWI_set_Callback_ID(NULL);
+ return r6;
+}
+
+static void Sio32IDInit(void)
+{
+ REG_IME = 0;
+ REG_IE &= ~((8 << gRfuState->timerSelect) | INTR_FLAG_SERIAL);
+ REG_IME = 1;
+ REG_RCNT = 0;
+ REG_SIOCNT = SIO_32BIT_MODE;
+ REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE;
+ CpuFill32(0, &gRfuS32Id, sizeof(struct RfuS32Id));
+ REG_IF = INTR_FLAG_SERIAL;
+}
+
+static s32 Sio32IDMain(void)
+{
+ u8 r12;
+
+ switch (r12 = gRfuS32Id.unk1)
+ {
+ case 0:
+ gRfuS32Id.unk0 = 1;
+ REG_SIOCNT |= SIO_38400_BPS;
+ REG_IME = r12;
+ REG_IE |= INTR_FLAG_SERIAL;
+ REG_IME = 1;
+ gRfuS32Id.unk1 = 1;
+ *(vu8 *)&REG_SIOCNT |= SIO_ENABLE;
+ break;
+ case 1:
+ if (gRfuS32Id.unkA == 0)
+ {
+ if (gRfuS32Id.unk0 == 1)
+ {
+ if (gRfuS32Id.unk2 == 0)
+ {
+ REG_IME = gRfuS32Id.unk2;
+ REG_SIOCNT |= SIO_ENABLE;
+ REG_IME = r12;
+ }
+ }
+ else if (gRfuS32Id.unk4 != 0x8001 && !gRfuS32Id.unk2)
+ {
+ REG_IME = gRfuS32Id.unk2;
+ REG_IE &= ~INTR_FLAG_SERIAL;
+ REG_IME = r12;
+ REG_SIOCNT = gRfuS32Id.unk2;
+ REG_SIOCNT = SIO_32BIT_MODE;
+ REG_IF = INTR_FLAG_SERIAL;
+ REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE;
+ REG_IME = gRfuS32Id.unk2;
+ REG_IE |= INTR_FLAG_SERIAL;
+ REG_IME = r12;
+ }
+ break;
+ }
+ else
+ {
+ gRfuS32Id.unk1 = 2;
+ // fallthrough
+ }
+ default:
+ return gRfuS32Id.unkA;
+ }
+ return 0;
+}
+
+static void Sio32IDIntr(void)
+{
+ u32 r5;
+ u16 r0;
+#ifndef NONMATCHING
+ register u32 r1 asm("r1");
+ register u16 r0_ asm("r0");
+#else
+ u32 r1;
+ u16 r0_;
+#endif
+
+ r5 = REG_SIODATA32;
+ if (gRfuS32Id.unk0 != 1)
+ REG_SIOCNT |= SIO_ENABLE;
+ r1 = 16 * gRfuS32Id.unk0; // to handle side effect of inline asm
+ r1 = (r5 << r1) >> 16;
+ r5 = (r5 << 16 * (1 - gRfuS32Id.unk0)) >> 16;
+ if (gRfuS32Id.unkA == 0)
+ {
+ if (r1 == gRfuS32Id.unk6)
+ {
+ if (gRfuS32Id.unk2 > 3)
+ {
+ gRfuS32Id.unkA = r5;
+ }
+ else if (r1 == (u16)~gRfuS32Id.unk4)
+ {
+ r0_ = ~gRfuS32Id.unk6;
+ if (r5 == r0_)
+ ++gRfuS32Id.unk2;
+ }
+ }
+ else
+ {
+ gRfuS32Id.unk2 = gRfuS32Id.unkA;
+ }
+ }
+ if (gRfuS32Id.unk2 < 4)
+ gRfuS32Id.unk4 = *(gRfuS32Id.unk2 + _Str_Sio32ID);
+ else
+ gRfuS32Id.unk4 = 0x8001;
+ gRfuS32Id.unk6 = ~r5;
+ REG_SIODATA32 = (gRfuS32Id.unk4 << 16 * (1 - gRfuS32Id.unk0))
+ + (gRfuS32Id.unk6 << 16 * gRfuS32Id.unk0);
+ if (gRfuS32Id.unk0 == 1 && (gRfuS32Id.unk2 || r5 == 0x494E))
+ {
+ for (r0 = 0; r0 < 600; ++r0)
+ ;
+ if (gRfuS32Id.unkA == 0)
+ REG_SIOCNT |= SIO_ENABLE;
+ }
+}
diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c
index 8e27c04d8..50e102f19 100644
--- a/src/librfu_stwi.c
+++ b/src/librfu_stwi.c
@@ -1,4 +1,3 @@
-#include "global.h"
#include "librfu.h"
static void STWI_intr_timer(void);
@@ -12,7 +11,7 @@ static s32 STWI_reset_ClockCounter(void);
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
- // block2 for our RfuStruct, otherwise block1 holds the RfuStruct.
+ // block2 for our STWIStatus, otherwise block1 holds the STWIStatus.
// interrupt usually is a pointer to gIntrTable[1]
if (copyInterruptToRam == TRUE)
{
@@ -23,7 +22,7 @@ void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, b
else
{
*interrupt = IntrSIO32;
- gRfuState = (struct RfuStruct *)interruptStruct->block1;
+ gRfuState = (struct STWIStatus *)interruptStruct->block1;
}
gRfuState->rxPacket = &interruptStruct->rxPacketAlloc;
gRfuState->txPacket = &interruptStruct->txPacketAlloc;
@@ -142,7 +141,7 @@ u16 STWI_poll_CommandEnd(void)
void STWI_send_ResetREQ(void)
{
- if (!STWI_init(RFU_RESET))
+ if (!STWI_init(ID_RESET_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -151,7 +150,7 @@ void STWI_send_ResetREQ(void)
void STWI_send_LinkStatusREQ(void)
{
- if (!STWI_init(RFU_LINK_STATUS))
+ if (!STWI_init(ID_LINK_STATUS_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -160,7 +159,7 @@ void STWI_send_LinkStatusREQ(void)
void STWI_send_VersionStatusREQ(void)
{
- if (!STWI_init(RFU_VERSION_STATUS))
+ if (!STWI_init(ID_VERSION_STATUS_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -169,7 +168,7 @@ void STWI_send_VersionStatusREQ(void)
void STWI_send_SystemStatusREQ(void)
{
- if (!STWI_init(RFU_SYSTEM_STATUS))
+ if (!STWI_init(ID_SYSTEM_STATUS_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -178,7 +177,7 @@ void STWI_send_SystemStatusREQ(void)
void STWI_send_SlotStatusREQ(void)
{
- if (!STWI_init(RFU_SLOT_STATUS))
+ if (!STWI_init(ID_SLOT_STATUS_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -187,7 +186,7 @@ void STWI_send_SlotStatusREQ(void)
void STWI_send_ConfigStatusREQ(void)
{
- if (!STWI_init(RFU_CONFIG_STATUS))
+ if (!STWI_init(ID_CONFIG_STATUS_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -199,7 +198,7 @@ void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data)
u8 *packetBytes;
s32 i;
- if (!STWI_init(RFU_GAME_CONFIG))
+ if (!STWI_init(ID_GAME_CONFIG_REQ))
{
gRfuState->reqLength = 6;
// TODO: what is unk1
@@ -226,7 +225,7 @@ void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data)
void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3)
{
- if (!STWI_init(RFU_SYSTEM_CONFIG))
+ if (!STWI_init(ID_SYSTEM_CONFIG_REQ))
{
u8 *packetBytes;
@@ -242,7 +241,7 @@ void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3)
void STWI_send_SC_StartREQ(void)
{
- if (!STWI_init(RFU_SC_START))
+ if (!STWI_init(ID_SC_START_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -251,7 +250,7 @@ void STWI_send_SC_StartREQ(void)
void STWI_send_SC_PollingREQ(void)
{
- if (!STWI_init(RFU_SC_POLLING))
+ if (!STWI_init(ID_SC_POLL_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -260,7 +259,7 @@ void STWI_send_SC_PollingREQ(void)
void STWI_send_SC_EndREQ(void)
{
- if (!STWI_init(RFU_SC_END))
+ if (!STWI_init(ID_SC_END_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -269,7 +268,7 @@ void STWI_send_SC_EndREQ(void)
void STWI_send_SP_StartREQ(void)
{
- if (!STWI_init(RFU_SP_START))
+ if (!STWI_init(ID_SP_START_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -278,7 +277,7 @@ void STWI_send_SP_StartREQ(void)
void STWI_send_SP_PollingREQ(void)
{
- if (!STWI_init(RFU_SP_POLLING))
+ if (!STWI_init(ID_SP_POLL_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -287,7 +286,7 @@ void STWI_send_SP_PollingREQ(void)
void STWI_send_SP_EndREQ(void)
{
- if (!STWI_init(RFU_SP_END))
+ if (!STWI_init(ID_SP_END_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -296,7 +295,7 @@ void STWI_send_SP_EndREQ(void)
void STWI_send_CP_StartREQ(u16 unk1)
{
- if (!STWI_init(RFU_CP_START))
+ if (!STWI_init(ID_CP_START_REQ))
{
gRfuState->reqLength = 1;
gRfuState->txPacket->rfuPacket32.data[0] = unk1;
@@ -306,7 +305,7 @@ void STWI_send_CP_StartREQ(u16 unk1)
void STWI_send_CP_PollingREQ(void)
{
- if (!STWI_init(RFU_CP_POLLING))
+ if (!STWI_init(ID_CP_POLL_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -315,7 +314,7 @@ void STWI_send_CP_PollingREQ(void)
void STWI_send_CP_EndREQ(void)
{
- if (!STWI_init(RFU_CP_END))
+ if (!STWI_init(ID_CP_END_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -324,7 +323,7 @@ void STWI_send_CP_EndREQ(void)
void STWI_send_DataTxREQ(const void *in, u8 size)
{
- if (!STWI_init(RFU_DATA_TX))
+ if (!STWI_init(ID_DATA_TX_REQ))
{
u8 reqLength = (size / sizeof(u32));
if (size & (sizeof(u32) - 1))
@@ -337,7 +336,7 @@ void STWI_send_DataTxREQ(const void *in, u8 size)
void STWI_send_DataTxAndChangeREQ(const void *in, u8 size)
{
- if (!STWI_init(RFU_DATA_TX_AND_CHANGE))
+ if (!STWI_init(ID_DATA_TX_AND_CHANGE_REQ))
{
u8 reqLength = (size / sizeof(u32));
if (size & (sizeof(u32) - 1))
@@ -350,7 +349,7 @@ void STWI_send_DataTxAndChangeREQ(const void *in, u8 size)
void STWI_send_DataRxREQ(void)
{
- if (!STWI_init(RFU_DATA_RX))
+ if (!STWI_init(ID_DATA_RX_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -359,7 +358,7 @@ void STWI_send_DataRxREQ(void)
void STWI_send_MS_ChangeREQ(void)
{
- if (!STWI_init(RFU_MS_CHANGE))
+ if (!STWI_init(ID_MS_CHANGE_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -368,7 +367,7 @@ void STWI_send_MS_ChangeREQ(void)
void STWI_send_DataReadyAndChangeREQ(u8 unk)
{
- if (!STWI_init(RFU_DATA_READY_AND_CHANGE))
+ if (!STWI_init(ID_DATA_READY_AND_CHANGE_REQ))
{
if (!unk)
{
@@ -392,7 +391,7 @@ void STWI_send_DataReadyAndChangeREQ(u8 unk)
void STWI_send_DisconnectedAndChangeREQ(u8 unk0, u8 unk1)
{
- if (!STWI_init(RFU_DISCONNECTED_AND_CHANGE))
+ if (!STWI_init(ID_DISCONNECTED_AND_CHANGE_REQ))
{
u8 *packetBytes;
@@ -409,7 +408,7 @@ void STWI_send_DisconnectedAndChangeREQ(u8 unk0, u8 unk1)
void STWI_send_ResumeRetransmitAndChangeREQ(void)
{
- if (!STWI_init(RFU_RESUME_RETRANSMIT_AND_CHANGE))
+ if (!STWI_init(ID_RESUME_RETRANSMIT_AND_CHANGE_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -418,7 +417,7 @@ void STWI_send_ResumeRetransmitAndChangeREQ(void)
void STWI_send_DisconnectREQ(u8 unk)
{
- if (!STWI_init(RFU_DISCONNECT))
+ if (!STWI_init(ID_DISCONNECT_REQ))
{
gRfuState->reqLength = 1;
gRfuState->txPacket->rfuPacket32.data[0] = unk;
@@ -428,7 +427,7 @@ void STWI_send_DisconnectREQ(u8 unk)
void STWI_send_TestModeREQ(u8 unk0, u8 unk1)
{
- if (!STWI_init(RFU_TEST_MODE))
+ if (!STWI_init(ID_TEST_MODE_REQ))
{
gRfuState->reqLength = 1;
gRfuState->txPacket->rfuPacket32.data[0] = unk0 | (unk1 << 8);
@@ -441,7 +440,7 @@ void STWI_send_CPR_StartREQ(u16 unk0, u16 unk1, u8 unk2)
u32 *packetData;
u32 arg1;
- if (!STWI_init(RFU_CPR_START))
+ if (!STWI_init(ID_CPR_START_REQ))
{
gRfuState->reqLength = 2;
arg1 = unk1 | (unk0 << 16);
@@ -454,7 +453,7 @@ void STWI_send_CPR_StartREQ(u16 unk0, u16 unk1, u8 unk2)
void STWI_send_CPR_PollingREQ(void)
{
- if (!STWI_init(RFU_CPR_POLLING))
+ if (!STWI_init(ID_CPR_POLL_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -463,7 +462,7 @@ void STWI_send_CPR_PollingREQ(void)
void STWI_send_CPR_EndREQ(void)
{
- if (!STWI_init(RFU_CPR_END))
+ if (!STWI_init(ID_CPR_END_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -472,7 +471,7 @@ void STWI_send_CPR_EndREQ(void)
void STWI_send_StopModeREQ(void)
{
- if (!STWI_init(RFU_STOP_MODE))
+ if (!STWI_init(ID_STOP_MODE_REQ))
{
gRfuState->reqLength = 0;
STWI_start_Command();
@@ -614,7 +613,7 @@ static s32 STWI_restart_Command(void)
}
else
{
- if (gRfuState->reqActiveCommand == RFU_MS_CHANGE || gRfuState->reqActiveCommand == RFU_DATA_TX_AND_CHANGE || gRfuState->reqActiveCommand == RFU_UNK35 || gRfuState->reqActiveCommand == RFU_RESUME_RETRANSMIT_AND_CHANGE)
+ 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)
{
gRfuState->error = 1;
gRfuState->unk_2c = 0;