diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2020-01-16 05:38:24 +0800 |
---|---|---|
committer | huderlem <huderlem@gmail.com> | 2020-01-16 08:14:27 -0600 |
commit | c2be2e8c69eda4ecf0a1daa499dde10174b0891b (patch) | |
tree | f38f54af51bb386834adaafdfd1461a123406053 /src | |
parent | 8a5f292618e7464340a28bb584295510e4b50b3d (diff) |
sync documentation from firered
Diffstat (limited to 'src')
-rw-r--r-- | src/librfu.c | 4 | ||||
-rw-r--r-- | src/librfu_stwi.c | 446 | ||||
-rw-r--r-- | src/link_rfu.c | 228 | ||||
-rw-r--r-- | src/trade.c | 2 | ||||
-rw-r--r-- | src/union_room.c | 2 |
5 files changed, 320 insertions, 362 deletions
diff --git a/src/librfu.c b/src/librfu.c index b84ba7ae5..1a295fd48 100644 --- a/src/librfu.c +++ b/src/librfu.c @@ -4,6 +4,6 @@ struct RfuSlotStatusUNI* gRfuSlotStatusUNI[4]; struct RfuSlotStatusNI* gRfuSlotStatusNI[4]; struct RfuLinkStatus *gRfuLinkStatus; -u32 *gRfuStatic; +struct RfuStatic *gRfuStatic; struct RfuFixed* gRfuFixed; -u8 gRfuSIO32Id[12]; +struct RfuSIO32Id gRfuSIO32Id; diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c index 45abaa70b..b88f21737 100644 --- a/src/librfu_stwi.c +++ b/src/librfu_stwi.c @@ -1,23 +1,14 @@ -#include "global.h" #include "librfu.h" -struct STWIStatus *gSTWIStatus; - -extern IntrFunc IntrSIO32(void); - -extern void STWI_stop_timer(void); +static void STWI_intr_timer(void); +static u16 STWI_init(u8 request); +static s32 STWI_start_Command(void); +static void STWI_set_timer(u8 unk); +static void STWI_stop_timer(void); +static s32 STWI_restart_Command(void); +static s32 STWI_reset_ClockCounter(void); -void STWI_init_Callback_M(void); -void STWI_init_Callback_S(void); -void STWI_set_Callback_M(void * callback); -void STWI_set_Callback_S(void * callback); -u16 STWI_init(u8 request); -int STWI_start_Command(void); -void STWI_intr_timer(void); -void STWI_set_timer(u8 unk); - -int STWI_restart_Command(void); -int STWI_reset_ClockCounter(void); +struct STWIStatus *gSTWIStatus; void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam) { @@ -27,43 +18,39 @@ void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, b if (copyInterruptToRam == TRUE) { *interrupt = (IntrFunc)interruptStruct->block1; - DmaCopy16(3, &IntrSIO32, interruptStruct->block1, 0x960); - gSTWIStatus = (struct STWIStatus*)interruptStruct->block2; + DmaCopy16(3, &IntrSIO32, interruptStruct->block1, sizeof(interruptStruct->block1)); + gSTWIStatus = &interruptStruct->block2; } else { - *interrupt = (IntrFunc)IntrSIO32; - gSTWIStatus = (struct STWIStatus*)interruptStruct->block1; + *interrupt = IntrSIO32; + gSTWIStatus = (struct STWIStatus *)interruptStruct->block1; } - - gSTWIStatus->rxPacket = (union RfuPacket*)interruptStruct->rxPacketAlloc; - gSTWIStatus->txPacket = (union RfuPacket*)interruptStruct->txPacketAlloc; + gSTWIStatus->rxPacket = &interruptStruct->rxPacketAlloc; + gSTWIStatus->txPacket = &interruptStruct->txPacketAlloc; gSTWIStatus->msMode = 1; - gSTWIStatus->unk_0 = 0; - gSTWIStatus->txParams = 0; - gSTWIStatus->unk_5 = 0; - gSTWIStatus->unk_7 = 0; - gSTWIStatus->unk_8 = 0; - gSTWIStatus->unk_9 = 0; + 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->unk_12 = 0; - gSTWIStatus->unk_15 = 0; + gSTWIStatus->error = 0; + gSTWIStatus->recoveryCount = 0; gSTWIStatus->unk_2c = 0; - - REG_RCNT = 0x100; //TODO: mystery bit? + REG_RCNT = 0x100; // TODO: mystery bit? REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; STWI_init_Callback_M(); STWI_init_Callback_S(); - IntrEnable(INTR_FLAG_SERIAL); } -void STWI_init_timer(IntrFunc *interrupt, int timerSelect) +void STWI_init_timer(IntrFunc *interrupt, s32 timerSelect) { *interrupt = STWI_intr_timer; gSTWIStatus->timerSelect = timerSelect; - IntrEnable(INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect); } @@ -78,25 +65,24 @@ void AgbRFU_SoftReset(void) timerH = ®_TMCNT_H(gSTWIStatus->timerSelect); *timerH = 0; *timerL = 0; - *timerH = 0x83; + *timerH = TIMER_ENABLE | TIMER_1024CLK; while (*timerL <= 0x11) REG_RCNT = 0x80A2; *timerH = 3; REG_RCNT = 0x80A0; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; - - gSTWIStatus->unk_0 = 0; - gSTWIStatus->txParams = 0; - gSTWIStatus->unk_5 = 0; - gSTWIStatus->activeCommand = 0; - gSTWIStatus->unk_7 = 0; - gSTWIStatus->unk_8 = 0; - gSTWIStatus->unk_9 = 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->unk_12 = 0; + gSTWIStatus->error = 0; gSTWIStatus->msMode = 1; - gSTWIStatus->unk_15 = 0; + gSTWIStatus->recoveryCount = 0; gSTWIStatus->unk_2c = 0; } @@ -110,13 +96,13 @@ u16 STWI_read_status(u8 index) switch (index) { case 0: - return gSTWIStatus->unk_12; + return gSTWIStatus->error; case 1: return gSTWIStatus->msMode; case 2: - return gSTWIStatus->unk_0; + return gSTWIStatus->state; case 3: - return gSTWIStatus->activeCommand; + return gSTWIStatus->reqActiveCommand; default: return 0xFFFF; } @@ -124,136 +110,130 @@ u16 STWI_read_status(u8 index) void STWI_init_Callback_M(void) { - STWI_set_Callback_M(0); + STWI_set_Callback_M(NULL); } void STWI_init_Callback_S(void) { - STWI_set_Callback_S(0); + STWI_set_Callback_S(NULL); } -void STWI_set_Callback_M(void *callback) +// The callback can take 2 or 3 arguments. +void STWI_set_Callback_M(void *callbackM) { - gSTWIStatus->callbackM = callback; + gSTWIStatus->callbackM = callbackM; } -void STWI_set_Callback_S(void *callback) +void STWI_set_Callback_S(void (*callbackS)(u16)) { - gSTWIStatus->callbackS = callback; + gSTWIStatus->callbackS = callbackS; } -void STWI_set_Callback_ID(u32 id) +void STWI_set_Callback_ID(void (*func)(void)) // name in SDK, but is actually setting a function pointer { - gSTWIStatus->callbackID = id; + gSTWIStatus->unk_20 = func; } u16 STWI_poll_CommandEnd(void) { while (gSTWIStatus->unk_2c == TRUE) ; - return gSTWIStatus->unk_12; + return gSTWIStatus->error; } void STWI_send_ResetREQ(void) { - if (!STWI_init(RFU_RESET)) + if (!STWI_init(ID_RESET_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_LinkStatusREQ(void) { - if (!STWI_init(RFU_LINK_STATUS)) + if (!STWI_init(ID_LINK_STATUS_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_VersionStatusREQ(void) { - if (!STWI_init(RFU_VERSION_STATUS)) + if (!STWI_init(ID_VERSION_STATUS_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_SystemStatusREQ(void) { - if (!STWI_init(RFU_SYSTEM_STATUS)) + if (!STWI_init(ID_SYSTEM_STATUS_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_SlotStatusREQ(void) { - if (!STWI_init(RFU_SLOT_STATUS)) + if (!STWI_init(ID_SLOT_STATUS_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_ConfigStatusREQ(void) { - if (!STWI_init(RFU_CONFIG_STATUS)) + if (!STWI_init(ID_CONFIG_STATUS_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } -void STWI_send_GameConfigREQ(u8 * unk1, u8 *data) +void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data) { u8 *packetBytes; - int i; + s32 i; - if (!STWI_init(RFU_GAME_CONFIG)) + if (!STWI_init(ID_GAME_CONFIG_REQ)) { - gSTWIStatus->txParams = 6; - - //TODO: what is unk1 + gSTWIStatus->reqLength = 6; + // TODO: what is unk1 packetBytes = gSTWIStatus->txPacket->rfuPacket8.data; packetBytes += sizeof(u32); - *(u16*)packetBytes = *(u16*)unk1; - + *(u16 *)packetBytes = *(u16 *)unk1; packetBytes += sizeof(u16); unk1 += sizeof(u16); - - for (i = 0; i < 14; i++) + for (i = 0; i < 14; ++i) { *packetBytes = *unk1; - packetBytes++; - unk1++; + ++packetBytes; + ++unk1; } - - for (i = 0; i < 8; i++) + for (i = 0; i < 8; ++i) { *packetBytes = *data; - packetBytes++; - data++; + ++packetBytes; + ++data; } - STWI_start_Command(); } } 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; - gSTWIStatus->txParams = 1; - + gSTWIStatus->reqLength = 1; packetBytes = gSTWIStatus->txPacket->rfuPacket8.data; packetBytes += sizeof(u32); - *packetBytes++ = unk3; *packetBytes++ = unk2; *(u16*)packetBytes = unk1; @@ -263,63 +243,63 @@ 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)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_SC_PollingREQ(void) { - if (!STWI_init(RFU_SC_POLLING)) + if (!STWI_init(ID_SC_POLL_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_SC_EndREQ(void) { - if (!STWI_init(RFU_SC_END)) + if (!STWI_init(ID_SC_END_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_SP_StartREQ(void) { - if (!STWI_init(RFU_SP_START)) + if (!STWI_init(ID_SP_START_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_SP_PollingREQ(void) { - if (!STWI_init(RFU_SP_POLLING)) + if (!STWI_init(ID_SP_POLL_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_SP_EndREQ(void) { - if (!STWI_init(RFU_SP_END)) + if (!STWI_init(ID_SP_END_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_CP_StartREQ(u16 unk1) { - if (!STWI_init(RFU_CP_START)) + if (!STWI_init(ID_CP_START_REQ)) { - gSTWIStatus->txParams = 1; + gSTWIStatus->reqLength = 1; gSTWIStatus->txPacket->rfuPacket32.data[0] = unk1; STWI_start_Command(); } @@ -327,142 +307,132 @@ 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)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_CP_EndREQ(void) { - if (!STWI_init(RFU_CP_END)) + if (!STWI_init(ID_CP_END_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } -void STWI_send_DataTxREQ(void *in, u8 size) +void STWI_send_DataTxREQ(const void *in, u8 size) { - if (!STWI_init(RFU_DATA_TX)) + if (!STWI_init(ID_DATA_TX_REQ)) { - u8 txParams = (size / sizeof(u32)); + u8 reqLength = (size / sizeof(u32)); if (size & (sizeof(u32) - 1)) - txParams += 1; - - gSTWIStatus->txParams = txParams; - CpuCopy32(in, gSTWIStatus->txPacket->rfuPacket32.data, gSTWIStatus->txParams * sizeof(u32)); + reqLength += 1; + gSTWIStatus->reqLength = reqLength; + CpuCopy32(in, gSTWIStatus->txPacket->rfuPacket32.data, gSTWIStatus->reqLength * sizeof(u32)); STWI_start_Command(); } } -void STWI_send_DataTxAndChangeREQ(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 txParams = (size / sizeof(u32)); + u8 reqLength = (size / sizeof(u32)); if (size & (sizeof(u32) - 1)) - txParams += 1; - - gSTWIStatus->txParams = txParams; - CpuCopy32(in, gSTWIStatus->txPacket->rfuPacket32.data, gSTWIStatus->txParams * sizeof(u32)); + reqLength += 1; + gSTWIStatus->reqLength = reqLength; + CpuCopy32(in, gSTWIStatus->txPacket->rfuPacket32.data, gSTWIStatus->reqLength * sizeof(u32)); STWI_start_Command(); } } void STWI_send_DataRxREQ(void) { - if (!STWI_init(RFU_DATA_RX)) + if (!STWI_init(ID_DATA_RX_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_MS_ChangeREQ(void) { - if (!STWI_init(RFU_MS_CHANGE)) + if (!STWI_init(ID_MS_CHANGE_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } 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) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; } else { u8 *packetBytes; - gSTWIStatus->txParams = 1; - + gSTWIStatus->reqLength = 1; packetBytes = gSTWIStatus->txPacket->rfuPacket8.data; packetBytes += sizeof(u32); - *packetBytes++ = unk; *packetBytes++ = 0; *packetBytes++ = 0; *packetBytes = 0; } - STWI_start_Command(); } } 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; - gSTWIStatus->txParams = 1; - + gSTWIStatus->reqLength = 1; packetBytes = gSTWIStatus->txPacket->rfuPacket8.data; packetBytes += sizeof(u32); - *packetBytes++ = unk0; *packetBytes++ = unk1; *packetBytes++ = 0; *packetBytes = 0; - STWI_start_Command(); } } void STWI_send_ResumeRetransmitAndChangeREQ(void) { - if (!STWI_init(RFU_RESUME_RETRANSMIT_AND_CHANGE)) + if (!STWI_init(ID_RESUME_RETRANSMIT_AND_CHANGE_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_DisconnectREQ(u8 unk) { - if (!STWI_init(RFU_DISCONNECT)) + if (!STWI_init(ID_DISCONNECT_REQ)) { - gSTWIStatus->txParams = 1; + gSTWIStatus->reqLength = 1; gSTWIStatus->txPacket->rfuPacket32.data[0] = unk; - STWI_start_Command(); } } void STWI_send_TestModeREQ(u8 unk0, u8 unk1) { - if (!STWI_init(RFU_TEST_MODE)) + if (!STWI_init(ID_TEST_MODE_REQ)) { - gSTWIStatus->txParams = 1; + gSTWIStatus->reqLength = 1; gSTWIStatus->txPacket->rfuPacket32.data[0] = unk0 | (unk1 << 8); - STWI_start_Command(); } } @@ -472,71 +442,69 @@ 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)) { - gSTWIStatus->txParams = 2; - + gSTWIStatus->reqLength = 2; arg1 = unk1 | (unk0 << 16); packetData = gSTWIStatus->txPacket->rfuPacket32.data; packetData[0] = arg1; packetData[1] = unk2; - STWI_start_Command(); } } void STWI_send_CPR_PollingREQ(void) { - if (!STWI_init(RFU_CPR_POLLING)) + if (!STWI_init(ID_CPR_POLL_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_CPR_EndREQ(void) { - if (!STWI_init(RFU_CPR_END)) + if (!STWI_init(ID_CPR_END_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_StopModeREQ(void) { - if (!STWI_init(RFU_STOP_MODE)) + if (!STWI_init(ID_STOP_MODE_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } -void STWI_intr_timer(void) +static void STWI_intr_timer(void) { switch (gSTWIStatus->timerState) { - //TODO: Make an enum for these - case 2: - gSTWIStatus->timerActive = 1; - STWI_set_timer(50); - break; - case 1: - case 4: - STWI_stop_timer(); - STWI_restart_Command(); - break; - case 3: - gSTWIStatus->timerActive = 1; - STWI_stop_timer(); - STWI_reset_ClockCounter(); - if (gSTWIStatus->callbackM) - gSTWIStatus->callbackM(255, 0); - break; + // TODO: Make an enum for these + case 2: + gSTWIStatus->timerActive = 1; + STWI_set_timer(50); + break; + case 1: + case 4: + STWI_stop_timer(); + STWI_restart_Command(); + break; + case 3: + gSTWIStatus->timerActive = 1; + STWI_stop_timer(); + STWI_reset_ClockCounter(); + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(255, 0); + break; } } -void STWI_set_timer(u8 unk) +static void STWI_set_timer(u8 unk) { vu16 *timerL; vu16 *timerH; @@ -546,144 +514,134 @@ void STWI_set_timer(u8 unk) REG_IME = 0; switch (unk) { - case 50: - *timerL = 0xFCCB; - gSTWIStatus->timerState = 1; - break; - case 80: - *timerL = 0xFAE0; - gSTWIStatus->timerState = 2; - break; - case 100: - *timerL = 0xF996; - gSTWIStatus->timerState = 3; - break; - case 130: - *timerL = 0xF7AD; - gSTWIStatus->timerState = 4; - break; + case 50: + *timerL = 0xFCCB; + gSTWIStatus->timerState = 1; + break; + case 80: + *timerL = 0xFAE0; + gSTWIStatus->timerState = 2; + break; + case 100: + *timerL = 0xF996; + gSTWIStatus->timerState = 3; + break; + case 130: + *timerL = 0xF7AD; + gSTWIStatus->timerState = 4; + break; } *timerH = TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_1024CLK; REG_IF = INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect; REG_IME = 1; } -void STWI_stop_timer(void) +static void STWI_stop_timer(void) { gSTWIStatus->timerState = 0; - REG_TMCNT_L(gSTWIStatus->timerSelect) = 0; REG_TMCNT_H(gSTWIStatus->timerSelect) = 0; } -u16 STWI_init(u8 request) +static u16 STWI_init(u8 request) { if (!REG_IME) { - gSTWIStatus->unk_12 = 6; - if (gSTWIStatus->callbackM) - gSTWIStatus->callbackM(request, gSTWIStatus->unk_12); + gSTWIStatus->error = ERR_REQ_CMD_IME_DISABLE; + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(request, gSTWIStatus->error); return TRUE; } else if (gSTWIStatus->unk_2c == TRUE) { - gSTWIStatus->unk_12 = 2; + gSTWIStatus->error = ERR_REQ_CMD_SENDING; gSTWIStatus->unk_2c = FALSE; - if (gSTWIStatus->callbackM) - gSTWIStatus->callbackM(request, gSTWIStatus->unk_12); + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(request, gSTWIStatus->error); return TRUE; } else if(!gSTWIStatus->msMode) { - gSTWIStatus->unk_12 = 4; - if (gSTWIStatus->callbackM) - gSTWIStatus->callbackM(request, gSTWIStatus->unk_12, gSTWIStatus); + gSTWIStatus->error = ERR_REQ_CMD_CLOCK_SLAVE; + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(request, gSTWIStatus->error, gSTWIStatus); return TRUE; } else { gSTWIStatus->unk_2c = TRUE; - gSTWIStatus->activeCommand = request; - gSTWIStatus->unk_0 = 0; - gSTWIStatus->txParams = 0; - gSTWIStatus->unk_5 = 0; - gSTWIStatus->unk_7 = 0; - gSTWIStatus->unk_8 = 0; - gSTWIStatus->unk_9 = 0; + 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->unk_12 = 0; - gSTWIStatus->unk_15 = 0; - + gSTWIStatus->error = 0; + gSTWIStatus->recoveryCount = 0; REG_RCNT = 0x100; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; return FALSE; } } -int STWI_start_Command() +static s32 STWI_start_Command(void) { u16 imeTemp; - // Yes, it matters that it's casted to a u32... - *(u32*)gSTWIStatus->txPacket->rfuPacket8.data = 0x99660000 | (gSTWIStatus->txParams << 8) | gSTWIStatus->activeCommand; + // equivalent to gSTWIStatus->txPacket->rfuPacket32.command, + // but the cast here is required to avoid register issue + *(u32 *)gSTWIStatus->txPacket->rfuPacket8.data = 0x99660000 | (gSTWIStatus->reqLength << 8) | gSTWIStatus->reqActiveCommand; REG_SIODATA32 = gSTWIStatus->txPacket->rfuPacket32.command; - - gSTWIStatus->unk_0 = 0; - gSTWIStatus->unk_5 = 1; - + gSTWIStatus->state = 0; + gSTWIStatus->reqNext = 1; imeTemp = REG_IME; REG_IME = 0; 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; - return 0; } -int STWI_restart_Command(void) +static s32 STWI_restart_Command(void) { - if (gSTWIStatus->unk_15 <= 1) + if (gSTWIStatus->recoveryCount <= 1) { - gSTWIStatus->unk_15++; + ++gSTWIStatus->recoveryCount; STWI_start_Command(); } else { - if (gSTWIStatus->activeCommand == RFU_MS_CHANGE || gSTWIStatus->activeCommand == RFU_DATA_TX_AND_CHANGE || gSTWIStatus->activeCommand == RFU_UNK35 || gSTWIStatus->activeCommand == RFU_RESUME_RETRANSMIT_AND_CHANGE) + 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) { - gSTWIStatus->unk_12 = 1; + gSTWIStatus->error = ERR_REQ_CMD_CLOCK_DRIFT; gSTWIStatus->unk_2c = 0; - - if (gSTWIStatus->callbackM) - gSTWIStatus->callbackM(gSTWIStatus->activeCommand, gSTWIStatus->unk_12); + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error); } else { - gSTWIStatus->unk_12 = 1; + gSTWIStatus->error = ERR_REQ_CMD_CLOCK_DRIFT; gSTWIStatus->unk_2c = 0; - - if (gSTWIStatus->callbackM) - gSTWIStatus->callbackM(gSTWIStatus->activeCommand, gSTWIStatus->unk_12); - - gSTWIStatus->unk_0 = 4; //TODO: what's 4 + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error); + gSTWIStatus->state = 4; // TODO: what's 4 } } - return 0; } -int STWI_reset_ClockCounter(void) +static s32 STWI_reset_ClockCounter(void) { - gSTWIStatus->unk_0 = 5; //TODO: what is 5 - gSTWIStatus->txParams = 0; - gSTWIStatus->unk_5 = 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; REG_SIOCNT = (SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS) + 0x7F; - return 0; } diff --git a/src/link_rfu.c b/src/link_rfu.c index 6f45b528e..9291f574e 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -364,7 +364,7 @@ u32 sub_800BEC0(void) void rfu_REQ_sendData_wrapper(u8 r2) { u8 val; - if (!gRfuLinkStatus->unk_00) + if (!gRfuLinkStatus->parentChild) { val = gUnknown_03004140.unk_02; r2 = 0; @@ -515,14 +515,14 @@ u8 sub_800C12C(u16 r6, u16 r8) sub_800D30C(0xF3, 0x01); return 2; } - for (i = 0; i < gRfuLinkStatus->unk_08; i++) + for (i = 0; i < gRfuLinkStatus->findParentCount; i++) { - if (gRfuLinkStatus->unk_14[i].unk_00 == r6) + if (gRfuLinkStatus->partner[i].id == r6) { break; } } - if (gRfuLinkStatus->unk_08 == 0 || i == gRfuLinkStatus->unk_08) + if (gRfuLinkStatus->findParentCount == 0 || i == gRfuLinkStatus->findParentCount) { gUnknown_03004140.unk_14 = 3; sub_800D30C(0xF3, 0x01); @@ -561,7 +561,7 @@ void sub_800C210(u8 a0) gUnknown_03004140.unk_34[i] = 0; } } - i = gRfuLinkStatus->unk_03 & a0; + i = gRfuLinkStatus->linkLossSlotFlag & a0; if (i) { sub_800D334(i); @@ -630,8 +630,8 @@ void sub_800C27C(bool8 a0) case 16: gUnknown_03004140.unk_04 = gUnknown_03004140.unk_11; gUnknown_03004140.unk_05 = gUnknown_03004140.unk_12; - sub_800D334(gRfuLinkStatus->unk_03); - gUnknown_03004140.unk_14 = gRfuLinkStatus->unk_03; + sub_800D334(gRfuLinkStatus->linkLossSlotFlag); + gUnknown_03004140.unk_14 = gRfuLinkStatus->linkLossSlotFlag; sub_800D30C(0x33, 0x01); return; case 17: @@ -703,7 +703,7 @@ bool8 sub_800C36C(u16 a0) } sub_800D610(); } - if (gRfuLinkStatus->unk_00 == 1) + if (gRfuLinkStatus->parentChild == 1) { if (sp2) { @@ -834,7 +834,7 @@ void sub_800C54C(u32 a0) case 15: break; case 16: - rfu_REQ_CHILD_startConnectRecovery(gRfuLinkStatus->unk_03); + rfu_REQ_CHILD_startConnectRecovery(gRfuLinkStatus->linkLossSlotFlag); break; case 17: rfu_REQ_CHILD_pollConnectRecovery(); @@ -857,7 +857,7 @@ void sub_800C54C(u32 a0) gUnknown_03004140.unk_0e = 0; } } while (gUnknown_03004140.unk_04 == 18 || gUnknown_03004140.unk_04 == 19); - if (gRfuLinkStatus->unk_00 != 1 || !sub_800C36C(0)) + if (gRfuLinkStatus->parentChild != 1 || !sub_800C36C(0)) { sub_800CF34(); sub_800D158(); @@ -910,7 +910,7 @@ static void sub_800C744(u32 a0) static void sub_800C7B4(u16 r8, u16 r6) { u8 sp0; - register u8 *stwiRecvBuffer asm("r0"); + register struct RfuIntrStruct *stwiRecvBuffer asm("r0"); u8 *tmp; u8 i; @@ -983,7 +983,7 @@ static void sub_800C7B4(u16 r8, u16 r6) { sub_800D30C(0x20, 0x01); } - if (gUnknown_03004140.unk_0b && gUnknown_03004140.unk_1a != 1 && gRfuLinkStatus->unk_08 == 4) + if (gUnknown_03004140.unk_0b && gUnknown_03004140.unk_1a != 1 && gRfuLinkStatus->findParentCount == 4) { rfu_REQ_endSearchParent(); rfu_waitREQComplete(); @@ -1059,11 +1059,11 @@ static void sub_800C7B4(u16 r8, u16 r6) case 50: if (r6 == 0) { - gUnknown_03004140.unk_14 = gRfuLinkStatus->unk_03; + gUnknown_03004140.unk_14 = gRfuLinkStatus->linkLossSlotFlag; gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 17; for (gUnknown_03004140.unk_10 = 0; gUnknown_03004140.unk_10 < 4; gUnknown_03004140.unk_10 ++) { - if ((gRfuLinkStatus->unk_03 >> gUnknown_03004140.unk_10) & 1) + if ((gRfuLinkStatus->linkLossSlotFlag >> gUnknown_03004140.unk_10) & 1) { break; } @@ -1092,7 +1092,7 @@ static void sub_800C7B4(u16 r8, u16 r6) else { gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0; - sub_800D334(gRfuLinkStatus->unk_03); + sub_800D334(gRfuLinkStatus->linkLossSlotFlag); gUnknown_03004140.unk_1e = 0x33; } gUnknown_03004140.unk_34[gUnknown_03004140.unk_10] = 0; @@ -1126,7 +1126,7 @@ static void sub_800C7B4(u16 r8, u16 r6) { gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0; sub_800D610(); - sub_800D334(gRfuLinkStatus->unk_02 | gRfuLinkStatus->unk_03); + sub_800D334(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); gUnknown_03004140.unk_14 = sp0; sub_800D30C(0x25, 0x01); } @@ -1148,11 +1148,11 @@ static void sub_800C7B4(u16 r8, u16 r6) rfu_REQ_RFUStatus(); rfu_waitREQComplete(); rfu_getRFUStatus(&sp0); - if (sp0 == 0 && gRfuLinkStatus->unk_00 == 0) + if (sp0 == 0 && gRfuLinkStatus->parentChild == 0) { stwiRecvBuffer = rfu_getSTWIRecvBuffer(); - stwiRecvBuffer[4] = gRfuLinkStatus->unk_02; - stwiRecvBuffer[5] = 1; + stwiRecvBuffer->rxPacketAlloc.rfuPacket8.data[4] = gRfuLinkStatus->connSlotFlag; + stwiRecvBuffer->rxPacketAlloc.rfuPacket8.data[5] = 1; sub_800C36C(0x29); r6 = 0; } @@ -1163,7 +1163,7 @@ static void sub_800C7B4(u16 r8, u16 r6) if (r6 == 0) { stwiRecvBuffer = rfu_getSTWIRecvBuffer(); - gUnknown_03004140.unk_14 = stwiRecvBuffer[8]; + gUnknown_03004140.unk_14 = stwiRecvBuffer->rxPacketAlloc.rfuPacket8.data[8]; sub_800D358(gUnknown_03004140.unk_14); if (gUnknown_03004140.unk_30) { @@ -1191,7 +1191,7 @@ static void sub_800C7B4(u16 r8, u16 r6) gUnknown_03004140.unk_00 &= ~gUnknown_03004140.unk_14; if (gUnknown_03004140.unk_07) { - if (gRfuLinkStatus->unk_00 == 0xFF) + if (gRfuLinkStatus->parentChild == 0xFF) { if (gUnknown_03004140.unk_07 == 8) { @@ -1206,7 +1206,7 @@ static void sub_800C7B4(u16 r8, u16 r6) } } } - if (gRfuLinkStatus->unk_00 == 0xFF) + if (gRfuLinkStatus->parentChild == 0xFF) { if (gUnknown_03004140.unk_04 == 0) { @@ -1221,7 +1221,7 @@ static void sub_800C7B4(u16 r8, u16 r6) break; case 38: sub_800D20C(); - if (gRfuLinkStatus->unk_00 != 0xFF) + if (gRfuLinkStatus->parentChild != 0xFF) { sub_800D30C(0x50, 0x00); } @@ -1246,8 +1246,8 @@ static void sub_800C7B4(u16 r8, u16 r6) { if (r8 == 28 && r6 != 0 && gUnknown_03004140.unk_07 == 4) { - gRfuLinkStatus->unk_00 = 1; - gRfuLinkStatus->unk_02 = 15; + gRfuLinkStatus->parentChild = 1; + gRfuLinkStatus->connSlotFlag = 15; sub_800D334(15); rfu_waitREQComplete(); return; @@ -1279,7 +1279,7 @@ static void sub_800CEB0(u16 r6) r7 = gUnknown_03004140.unk_0e; gUnknown_03004140.unk_0e = 0; gUnknown_03004140.unk_0f = 1; - if (gRfuLinkStatus->unk_00 == 0) + if (gRfuLinkStatus->parentChild == 0) { sub_800C36C(r6); if (gUnknown_03004140.unk_02 != 1) @@ -1321,8 +1321,8 @@ static void sub_800CF34(void) if (gUnknown_03004140.unk_04 == 5 || gUnknown_03004140.unk_04 == 6 || gUnknown_03004140.unk_04 == 7 || gUnknown_03004140.unk_04 == 8) { - flags = ((gRfuLinkStatus->unk_02 ^ gUnknown_03004140.unk_0c) & gRfuLinkStatus->unk_02) & ~gRfuLinkStatus->unk_07; - gUnknown_03004140.unk_0c = gRfuLinkStatus->unk_02; + flags = ((gRfuLinkStatus->connSlotFlag ^ gUnknown_03004140.unk_0c) & gRfuLinkStatus->connSlotFlag) & ~gRfuLinkStatus->getNameFlag; + gUnknown_03004140.unk_0c = gRfuLinkStatus->connSlotFlag; if (flags) { gUnknown_03004140.unk_14 = flags; @@ -1340,14 +1340,14 @@ static void sub_800CF34(void) } else if (gUnknown_03004140.unk_24 & r4) { - if (gRfuSlotStatusNI[i]->unk_34 == 0x46) + if (gRfuSlotStatusNI[i]->recv.state == 0x46) { - if (gRfuSlotStatusNI[i]->unk_61 == 1) + if (gRfuSlotStatusNI[i]->recv.dataType == 1) { r5 = 0x02; for (ptr = gUnknown_03004140.unk_20; *ptr != 0xFFFF; ptr++) { - if (gRfuLinkStatus->unk_14[i].unk_04 == *ptr) + if (gRfuLinkStatus->partner[i].serialNo == *ptr) { gUnknown_03004140.unk_00 |= r4; gUnknown_03004140.unk_01++; @@ -1386,7 +1386,7 @@ static void sub_800CF34(void) if (gUnknown_03004140.unk_0d) { r5 = 0x01; - if (gRfuLinkStatus->unk_06 && ((gUnknown_03004140.unk_03 & gUnknown_03004140.unk_00) != gUnknown_03004140.unk_00)) + if (gRfuLinkStatus->sendSlotUNIFlag && ((gUnknown_03004140.unk_03 & gUnknown_03004140.unk_00) != gUnknown_03004140.unk_00)) { r5 = 0x00; } @@ -1434,7 +1434,7 @@ static void sub_800D158(void) REG_IME = 0; if (gUnknown_03004140.unk_04 == 15) { - if (--gUnknown_03004140.unk_28[gUnknown_03004140.unk_10] == 0 || gRfuSlotStatusNI[gUnknown_03004140.unk_10]->unk_0 == 0x27) + if (--gUnknown_03004140.unk_28[gUnknown_03004140.unk_10] == 0 || gRfuSlotStatusNI[gUnknown_03004140.unk_10]->send.state == 0x27) { sub_800D630(); gUnknown_03004140.unk_04 = 24; @@ -1453,7 +1453,7 @@ static void sub_800D158(void) if (gUnknown_03004140.unk_02 == 0) { gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0; - sub_800D334(gRfuLinkStatus->unk_02 | gRfuLinkStatus->unk_03); + sub_800D334(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); gUnknown_03004140.unk_14 = 0; sub_800D30C(0x25, 0x01); } @@ -1462,7 +1462,7 @@ static void sub_800D158(void) static void sub_800D20C(void) { - if (gUnknown_03004140.unk_04 == 15 && gRfuSlotStatusNI[gUnknown_03004140.unk_10]->unk_0 == 0x26) + if (gUnknown_03004140.unk_04 == 15 && gRfuSlotStatusNI[gUnknown_03004140.unk_10]->send.state == 0x26) { gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0; rfu_clearSlot(4, gUnknown_03004140.unk_10); @@ -1490,11 +1490,11 @@ static u8 sub_800D294(void) const u16 *ptr; u8 flags = 0x00; - for (i = 0; i < gRfuLinkStatus->unk_08; i++) + for (i = 0; i < gRfuLinkStatus->findParentCount; i++) { for (ptr = gUnknown_03004140.unk_20; *ptr != 0xFFFF; ptr++) { - if (gRfuLinkStatus->unk_14[i].unk_04 == *ptr) + if (gRfuLinkStatus->partner[i].serialNo == *ptr) { flags |= (1 << i); } @@ -1525,34 +1525,34 @@ static void sub_800D358(u8 a0) { u8 i; - if (gRfuLinkStatus->unk_04) + if (gRfuLinkStatus->sendSlotNIFlag) { for (i = 0; i < 4; i++) { - if (gRfuSlotStatusNI[i]->unk_0 & 0x8000 && gRfuSlotStatusNI[i]->unk_1a & a0) + if (gRfuSlotStatusNI[i]->send.state & 0x8000 && gRfuSlotStatusNI[i]->send.bmSlot & a0) { - rfu_changeSendTarget(0x20, i, gRfuSlotStatusNI[i]->unk_1a & ~a0); + rfu_changeSendTarget(0x20, i, gRfuSlotStatusNI[i]->send.bmSlot & ~a0); } } } - if (gRfuLinkStatus->unk_05) + if (gRfuLinkStatus->recvSlotNIFlag) { for (i = 0; i < 4; i++) { - if (gRfuSlotStatusNI[i]->unk_34 & 0x8000 && gRfuSlotStatusNI[i]->unk_4e & a0) + if (gRfuSlotStatusNI[i]->recv.state & 0x8000 && gRfuSlotStatusNI[i]->recv.bmSlot & a0) { rfu_NI_stopReceivingData(i); } } } - if (gRfuLinkStatus->unk_06) + if (gRfuLinkStatus->sendSlotUNIFlag) { - gRfuLinkStatus->unk_06 &= ~a0; + gRfuLinkStatus->sendSlotUNIFlag &= ~a0; for (i = 0; i < 4; i++) { - if (gRfuSlotStatusUNI[i]->unk_0 == 0x8024 && a0 & gRfuSlotStatusUNI[i]->unk_3) + if (gRfuSlotStatusUNI[i]->send.state == 0x8024 && a0 & gRfuSlotStatusUNI[i]->send.bmSlot) { - gRfuSlotStatusUNI[i]->unk_3 &= ~a0; + gRfuSlotStatusUNI[i]->send.bmSlot &= ~a0; } } } @@ -1566,32 +1566,32 @@ static void sub_800D434(void) if (gUnknown_03004140.unk_18) { - if (gRfuLinkStatus->unk_04) + if (gRfuLinkStatus->sendSlotNIFlag) { for (i = 0; i < 4; i ++) { - if (gRfuSlotStatusNI[i]->unk_0 & 0x8000) + if (gRfuSlotStatusNI[i]->send.state & 0x8000) { flags = 0; for (j = 0; j < 4; j++) { - if ((gRfuSlotStatusNI[i]->unk_1a >> j) & 1 && gRfuSlotStatusNI[j]->unk_2 > gUnknown_03004140.unk_18) + if ((gRfuSlotStatusNI[i]->send.bmSlot >> j) & 1 && gRfuSlotStatusNI[j]->send.failCounter > gUnknown_03004140.unk_18) { flags |= (1 << j); } if (flags) { - rfu_changeSendTarget(0x20, i, flags ^ gRfuSlotStatusNI[i]->unk_1a); + rfu_changeSendTarget(0x20, i, flags ^ gRfuSlotStatusNI[i]->send.bmSlot); } } } } } - if (gRfuLinkStatus->unk_05) + if (gRfuLinkStatus->recvSlotNIFlag) { for (i = 0; i < 4; i++) { - if (gRfuSlotStatusNI[i]->unk_34 & 0x8000 && gRfuSlotStatusNI[i]->unk_36 > gUnknown_03004140.unk_18) + if (gRfuSlotStatusNI[i]->recv.state & 0x8000 && gRfuSlotStatusNI[i]->recv.failCounter > gUnknown_03004140.unk_18) { rfu_NI_stopReceivingData(i); } @@ -1628,7 +1628,7 @@ u8 sub_800D550(u8 a0, u16 a1) u8 sub_800D594(u16 a0) { - if (gRfuLinkStatus->unk_04 | gRfuLinkStatus->unk_05) + if (gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag) { gUnknown_03004140.unk_14 = 6; sub_800D30C(0xf3, 0x01); @@ -2049,17 +2049,17 @@ void ASCIIToPkmnStr(u8 *q1, const u8 *q2) u8 sub_800DD1C(u8 maxFlags) { u8 flagCount = 0; - u32 flags = gRfuLinkStatus->unk_02; + u32 flags = gRfuLinkStatus->connSlotFlag; u8 i; - if (gRfuLinkStatus->unk_00 == 1) + if (gRfuLinkStatus->parentChild == 1) { for (i = 0; i < 4; flags >>= 1, i++) { if (flags & 1) { if (maxFlags == flagCount + 1) - return gRfuLinkStatus->unk_0a[i]; + return gRfuLinkStatus->strength[i]; flagCount++; } } @@ -2069,7 +2069,7 @@ u8 sub_800DD1C(u8 maxFlags) for (i = 0; i < 4; flags >>= 1, i++) { if (flags & 1) - return gRfuLinkStatus->unk_0a[i]; + return gRfuLinkStatus->strength[i]; } } return 0; @@ -2177,10 +2177,10 @@ bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx) if (gUnknown_03004140.unk_06 == 1) { retVal = TRUE; - if (sub_8010454(gRfuLinkStatus->unk_14[idx].unk_04) && ((gRfuLinkStatus->unk_07 >> idx) & 1)) + if (sub_8010454(gRfuLinkStatus->partner[idx].serialNo) && ((gRfuLinkStatus->getNameFlag >> idx) & 1)) { - memcpy(buff1, gRfuLinkStatus->unk_14[idx].gname, 0xD); - memcpy(buff2, gRfuLinkStatus->unk_14[idx].uname, PLAYER_NAME_LENGTH + 1); + memcpy(buff1, gRfuLinkStatus->partner[idx].gname, 0xD); + memcpy(buff2, gRfuLinkStatus->partner[idx].uname, PLAYER_NAME_LENGTH + 1); } else { @@ -2191,10 +2191,10 @@ bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx) else { retVal = FALSE; - if (sub_8010454(gRfuLinkStatus->unk_14[idx].unk_04)) + if (sub_8010454(gRfuLinkStatus->partner[idx].serialNo)) { - memcpy(buff1, gRfuLinkStatus->unk_14[idx].gname, 0xD); - memcpy(buff2, gRfuLinkStatus->unk_14[idx].uname, PLAYER_NAME_LENGTH + 1); + memcpy(buff1, gRfuLinkStatus->partner[idx].gname, 0xD); + memcpy(buff2, gRfuLinkStatus->partner[idx].uname, PLAYER_NAME_LENGTH + 1); } else { @@ -2208,10 +2208,10 @@ bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx) bool8 sub_800DF34(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx) { bool8 retVal = FALSE; - if (gRfuLinkStatus->unk_14[idx].unk_04 == 0x7F7D) + if (gRfuLinkStatus->partner[idx].serialNo == 0x7F7D) { - memcpy(buff1, gRfuLinkStatus->unk_14[idx].gname, 0xD); - memcpy(buff2, gRfuLinkStatus->unk_14[idx].uname, 8); + memcpy(buff1, gRfuLinkStatus->partner[idx].gname, 0xD); + memcpy(buff2, gRfuLinkStatus->partner[idx].uname, 8); retVal = TRUE; } else @@ -2237,7 +2237,7 @@ void CreateWirelessStatusIndicatorSprite(u8 x, u8 y) x = 0xE7; y = 0x08; } - if (gRfuLinkStatus->unk_00 == 1) + if (gRfuLinkStatus->parentChild == 1) { sprId = CreateSprite(&sWirelessStatusIndicatorSpriteTemplate, x, y, 0); gSprites[sprId].data[7] = 0x1234; @@ -2278,12 +2278,12 @@ void LoadWirelessStatusIndicatorSpriteGfx(void) u8 sub_800E124(void) { u8 i; - u8 flags = gRfuLinkStatus->unk_02; + u8 flags = gRfuLinkStatus->connSlotFlag; for (i = 0; i < 4; i++) { if (flags & 1) { - return gRfuLinkStatus->unk_0a[i]; + return gRfuLinkStatus->strength[i]; } flags >>= 1; } @@ -2307,7 +2307,7 @@ void sub_800E174(void) struct Sprite *sprite = &gSprites[gWirelessStatusIndicatorSpriteId]; u8 signalStrength = 255; u8 i = 0; - if (gRfuLinkStatus->unk_00 == 1) + if (gRfuLinkStatus->parentChild == 1) { for (i = 0; i < GetLinkPlayerCount() - 1; i++) { @@ -2530,7 +2530,7 @@ void sub_800E6D0(void) void sub_800E700(void) { - if (!rfu_initializeAPI(gUnknown_03004140.unk_50, sizeof gUnknown_03004140.unk_50, gIntrTable + 1, TRUE)) + if (!rfu_initializeAPI((void *)gUnknown_03004140.unk_50, sizeof gUnknown_03004140.unk_50, gIntrTable + 1, TRUE)) { gLinkType = 0; sub_800AAF4(); @@ -2787,7 +2787,7 @@ void sub_800ED34(u16 unused) } rfu_REQ_recvData(); rfu_waitREQComplete(); - if (gRfuSlotStatusUNI[gUnknown_03005000.unk_c3e]->unk_12) + if (gRfuSlotStatusUNI[gUnknown_03005000.unk_c3e]->recv.newDataFlag) { gUnknown_03005000.unk_cd0++; sub_800D7D8(&gUnknown_03005000.unk_124, gUnknown_03005000.unk_c3f); @@ -2858,7 +2858,7 @@ bool8 sub_800EE94(void) bool32 sub_800EEBC(void) { - if (gUnknown_03005000.unk_04 == 7 && !sub_800C12C(gRfuLinkStatus->unk_14[gUnknown_03005000.unk_c3d].unk_00, 240)) + if (gUnknown_03005000.unk_04 == 7 && !sub_800C12C(gRfuLinkStatus->partner[gUnknown_03005000.unk_c3d].id, 240)) { gUnknown_03005000.unk_04 = 9; return TRUE; @@ -2971,7 +2971,7 @@ bool32 IsRfuRecvQueueEmpty(void) s32 i; s32 j; - if (gRfuLinkStatus->unk_06 == 0) + if (gRfuLinkStatus->sendSlotUNIFlag == 0) { return FALSE; } @@ -2999,7 +2999,7 @@ bool32 sub_800F0F8(void) else { gUnknown_03005000.unk_cdb = 0; - if ((gUnknown_03005000.unk_ce2 & gRfuLinkStatus->unk_02) == gUnknown_03005000.unk_ce2 && (gUnknown_03005000.unk_ce2 & gRfuLinkStatus->unk_02)) + if ((gUnknown_03005000.unk_ce2 & gRfuLinkStatus->connSlotFlag) == gUnknown_03005000.unk_ce2 && (gUnknown_03005000.unk_ce2 & gRfuLinkStatus->connSlotFlag)) { if (!gUnknown_03005000.unk_cdc) { @@ -3119,7 +3119,7 @@ bool32 sub_800F1E0(void) gUnknown_03005000.unk_0e = 0; } retval = gUnknown_03005000.unk_cdc; - return gRfuLinkStatus->unk_06 ? retval & 1 : FALSE; + return gRfuLinkStatus->sendSlotUNIFlag ? retval & 1 : FALSE; } void sub_800F498(u16 *a0, u8 *a1) @@ -3162,7 +3162,7 @@ bool32 sub_800F4F0(void) sub_800F86C(0); if (gUnknown_03004140.unk_02 == 0 && gUnknown_03005000.unk_ce4) { - rfu_REQ_disconnect(gRfuLinkStatus->unk_02 | gRfuLinkStatus->unk_03); + rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); rfu_waitREQComplete(); switchval = sub_8011A74(); if (switchval != 1 && switchval != 6 && switchval != 9) @@ -3305,7 +3305,7 @@ static void sub_800F86C(u8 unused) return; // fallthrough case 0x7700: - if (gRfuLinkStatus->unk_00 == 0) + if (gRfuLinkStatus->parentChild == 0) { gUnknown_03005000.playerCount = gRecvCmds[i][1]; gUnknown_03005000.unk_cce = sub_800F74C((u8 *)(gRecvCmds[i] + 2)); @@ -3353,7 +3353,7 @@ static void sub_800F86C(u8 unused) { if (gReceivedRemoteLinkPlayers != 0) { - if (gRecvCmds[i][1] & gRfuLinkStatus->unk_02) + if (gRecvCmds[i][1] & gRfuLinkStatus->connSlotFlag) { gReceivedRemoteLinkPlayers = 0; sub_800D630(); @@ -3611,7 +3611,7 @@ void sub_801011C(void) void sub_8010148(void) { - rfu_REQ_disconnect(gRfuLinkStatus->unk_02 | gRfuLinkStatus->unk_03); + rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); rfu_waitREQComplete(); sub_801011C(); } @@ -3631,7 +3631,7 @@ void LinkRfu_FatalError(void) { sub_800D630(); gUnknown_03005000.unk_ce4 = 1; - gUnknown_03005000.unk_ce3 = gRfuLinkStatus->unk_02 | gRfuLinkStatus->unk_03; + gUnknown_03005000.unk_ce3 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; } void sub_80101CC(void) @@ -3821,7 +3821,7 @@ bool8 sub_8010540(void) { if (gUnknown_03005000.unk_cd1[i] < 5 || gUnknown_03005000.unk_cd1[i] > 6) { - if (gRfuSlotStatusNI[i]->unk_34 == 0x46 || gRfuSlotStatusNI[i]->unk_34 == 0x48) + if (gRfuSlotStatusNI[i]->recv.state == 0x46 || gRfuSlotStatusNI[i]->recv.state == 0x48) { if (gUnknown_03005000.unk_cd5[i] == 8) { @@ -3833,7 +3833,7 @@ bool8 sub_8010540(void) } } - else if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_34 == 0x47) + else if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->recv.state == 0x47) rfu_clearSlot(8, i); { @@ -3898,7 +3898,7 @@ u32 sub_8010714(u16 a0, const u8 *a1) u8 r0 = sub_8011CE4(a1, a0); if (r0 == 0xFF) return 2; - if (gRfuSlotStatusNI[r0]->unk_0 == 0) + if (gRfuSlotStatusNI[r0]->send.state == 0) return 1; return 0; } @@ -3910,7 +3910,7 @@ void sub_8010750(void) sub_8010540(); for (i = 0; i < 4; i++) { - if (gRfuSlotStatusNI[i]->unk_0 == 0x26 || gRfuSlotStatusNI[i]->unk_0 == 0x27) + if (gRfuSlotStatusNI[i]->send.state == 0x26 || gRfuSlotStatusNI[i]->send.state == 0x27) { if (gUnknown_03005000.unk_cd5[i] == 10) gUnknown_03005000.unk_cd5[i] = 11; @@ -3924,16 +3924,16 @@ s32 sub_80107A0(void) s32 retval = 0; if (gUnknown_03005000.unk_c85 == 8) { - if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_0 == 0x26 || gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_0 == 0x27) + if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->send.state == 0x26 || gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->send.state == 0x27) rfu_clearSlot(4, gUnknown_03005000.unk_c3e); } - if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_34 == 0x46 || gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_34 == 0x48) + if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->recv.state == 0x46 || gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->recv.state == 0x48) { rfu_clearSlot(8, gUnknown_03005000.unk_c3e); sub_8011A64(gUnknown_03005000.unk_c86, 0); retval = gUnknown_03005000.unk_c86; } - else if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_34 == 0x47) + else if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->recv.state == 0x47) { rfu_clearSlot(8, gUnknown_03005000.unk_c3e); retval = 6; @@ -4370,7 +4370,7 @@ void sub_801120C(u8 a0, u8 unused1) { if ((gUnknown_03004140.unk_14 >> i) & 1) { - struct UnkLinkRfuStruct_02022B14 *structPtr = (void *)gRfuLinkStatus->unk_14[i].gname; + struct UnkLinkRfuStruct_02022B14 *structPtr = (void *)gRfuLinkStatus->partner[i].gname; if (structPtr->unk_0a_0 == sub_800F7DC()->unk_0a_0) { gUnknown_03005000.unk_cd1[i] = 0; @@ -4528,7 +4528,7 @@ u8 sub_8011628(s32 a0) { if ((a0 >> i) & 1) { - struct UnkLinkRfuStruct_02022B14 *structPtr = (void *)gRfuLinkStatus->unk_14[i].gname; + struct UnkLinkRfuStruct_02022B14 *structPtr = (void *)gRfuLinkStatus->partner[i].gname; if (structPtr->unk_0a_0 == 0x45) ret |= (1 << i); } @@ -4629,7 +4629,7 @@ void sub_8011674(u8 a0, u8 unused1) break; case 0x32: gUnknown_03005000.unk_f0 = 3; - if (gRfuLinkStatus->unk_00 == 0) + if (gRfuLinkStatus->parentChild == 0) gUnknown_03005000.unk_c3c = 1; break; case 0x30: @@ -4654,7 +4654,7 @@ void sub_8011674(u8 a0, u8 unused1) sub_800C27C(0); } - if (gRfuLinkStatus->unk_00 == 0xFF && gUnknown_03004140.unk_07 == 0 && FuncIsActiveTask(sub_800EB44) == TRUE) + if (gRfuLinkStatus->parentChild == 0xFF && gUnknown_03004140.unk_07 == 0 && FuncIsActiveTask(sub_800EB44) == TRUE) gUnknown_03005000.unk_04 = 0x11; sub_8011A64(2, a0); @@ -4825,13 +4825,13 @@ u8 sub_8011CE4(const u8 *a0, u16 a1) for (i = 0; i < 4; i++) { - u16 trainerId = ReadU16(gRfuLinkStatus->unk_14[i].gname + 2); - if (sub_8010454(gRfuLinkStatus->unk_14[i].unk_04) - && !StringCompare(a0, gRfuLinkStatus->unk_14[i].uname) + u16 trainerId = ReadU16(gRfuLinkStatus->partner[i].gname + 2); + if (sub_8010454(gRfuLinkStatus->partner[i].serialNo) + && !StringCompare(a0, gRfuLinkStatus->partner[i].uname) && a1 == trainerId) { ret = i; - if (gRfuLinkStatus->unk_14[i].unk_02 != 0xFF) + if (gRfuLinkStatus->partner[i].slot != 0xFF) break; } } @@ -4911,7 +4911,7 @@ void sub_8011EF4(u8 taskId) u8 id = sub_8011CE4((u8*)data, ReadU16(&data[8])); if (id != 0xFF) { - if (gRfuLinkStatus->unk_14[id].unk_02 != 0xFF) + if (gRfuLinkStatus->partner[id].slot != 0xFF) { gUnknown_03005000.unk_c3d = id; if (sub_800EEBC()) @@ -5006,9 +5006,9 @@ void sub_801209C(u8 taskId) u8 id = sub_8011CE4(gUnknown_03005000.playerName, trainerId); if (id != 0xFF) { - if (!sub_801200C(gTasks[taskId].data[1], (void *)gRfuLinkStatus->unk_14[id].gname)) + if (!sub_801200C(gTasks[taskId].data[1], (void *)gRfuLinkStatus->partner[id].gname)) { - if (gRfuLinkStatus->unk_14[id].unk_02 != 0xFF && !sub_800C12C(gRfuLinkStatus->unk_14[id].unk_00, 0x5A)) + if (gRfuLinkStatus->partner[id].slot != 0xFF && !sub_800C12C(gRfuLinkStatus->partner[id].id, 0x5A)) { gUnknown_03005000.unk_04 = 0xA; DestroyTask(taskId); @@ -5081,17 +5081,17 @@ void sub_801229C(void) s32 i, j; nullsub_13(GetBlockReceivedStatus(), 0x1C, 0x13, 2); - nullsub_13(gRfuLinkStatus->unk_02, 0x14, 1, 1); - nullsub_13(gRfuLinkStatus->unk_03, 0x17, 1, 1); + nullsub_13(gRfuLinkStatus->connSlotFlag, 0x14, 1, 1); + nullsub_13(gRfuLinkStatus->linkLossSlotFlag, 0x17, 1, 1); if (gUnknown_03005000.unk_0c == 1) { for (i = 0; i < 4; i++) { - if ((gRfuLinkStatus->unk_07 >> i) & 1) + if ((gRfuLinkStatus->getNameFlag >> i) & 1) { - nullsub_13(gRfuLinkStatus->unk_14[i].unk_04, 1, i + 3, 4); - nullsub_5((void*)gRfuLinkStatus->unk_14[i].gname, 6, i + 3); - nullsub_5(gRfuLinkStatus->unk_14[i].uname, 0x16, i + 3); + nullsub_13(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4); + nullsub_5((void*)gRfuLinkStatus->partner[i].gname, 6, i + 3); + nullsub_5(gRfuLinkStatus->partner[i].uname, 0x16, i + 3); } } for (i = 0; i < 4; i++) @@ -5103,7 +5103,7 @@ void sub_801229C(void) } nullsub_5(gUnknown_082ED868, 1, 0xF); } - else if (gRfuLinkStatus->unk_02 != 0 && gRfuLinkStatus->unk_07 != 0) + else if (gRfuLinkStatus->connSlotFlag != 0 && gRfuLinkStatus->getNameFlag != 0) { for (i = 0; i < 4; i++) { @@ -5111,19 +5111,19 @@ void sub_801229C(void) nullsub_5(gUnknown_082ED84B, 6, i + 3); nullsub_5(gUnknown_082ED85B, 0x16, i + 3); } - nullsub_13(gRfuLinkStatus->unk_14[gUnknown_03005000.unk_c3e].unk_04, 1, 3, 4); - nullsub_5((void*)gRfuLinkStatus->unk_14[gUnknown_03005000.unk_c3e].gname, 6, 3); - nullsub_5(gRfuLinkStatus->unk_14[gUnknown_03005000.unk_c3e].uname, 0x16, 3); + nullsub_13(gRfuLinkStatus->partner[gUnknown_03005000.unk_c3e].serialNo, 1, 3, 4); + nullsub_5((void*)gRfuLinkStatus->partner[gUnknown_03005000.unk_c3e].gname, 6, 3); + nullsub_5(gRfuLinkStatus->partner[gUnknown_03005000.unk_c3e].uname, 0x16, 3); } else { - for (i = 0; i < gRfuLinkStatus->unk_08; i++) + for (i = 0; i < gRfuLinkStatus->findParentCount; i++) { - if (gRfuLinkStatus->unk_14[i].unk_02 != 0xFF) + if (gRfuLinkStatus->partner[i].slot != 0xFF) { - nullsub_13(gRfuLinkStatus->unk_14[i].unk_04, 1, i + 3, 4); - nullsub_13(gRfuLinkStatus->unk_14[i].unk_00, 6, i + 3, 4); - nullsub_5(gRfuLinkStatus->unk_14[i].uname, 0x16, i + 3); + nullsub_13(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4); + nullsub_13(gRfuLinkStatus->partner[i].id, 6, i + 3, 4); + nullsub_5(gRfuLinkStatus->partner[i].uname, 0x16, i + 3); } } for (; i < 4; i++) diff --git a/src/trade.c b/src/trade.c index 9abc61428..bd97471e3 100644 --- a/src/trade.c +++ b/src/trade.c @@ -254,7 +254,7 @@ static bool32 sub_80771BC(void) { if (gUnknown_02022C2C == 29) { - if (gRfuSlotStatusNI[sub_800E87C(gUnknown_03004140.unk_00)]->unk_0 == 0) + if (gRfuSlotStatusNI[sub_800E87C(gUnknown_03004140.unk_00)]->send.state == 0) return TRUE; else return FALSE; diff --git a/src/union_room.c b/src/union_room.c index 9cb3bec79..6098ce349 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -4077,7 +4077,7 @@ s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3) StringCopy(arg3->field_58 + 0x10, gSpeciesNames[sUnionRoomTrade.playerSpecies]); for (i = 0; i < 4; i++) { - if (gRfuLinkStatus->unk_14[i].unk_04 == 2) + if (gRfuLinkStatus->partner[i].serialNo == 2) { ConvertIntToDecimalStringN(arg3->field_58 + 0x20, arg2[2], STR_CONV_MODE_LEFT_ALIGN, 3); StringCopy(arg3->field_58 + 0x30, gSpeciesNames[arg2[1]]); |