More documentation and symbol propagation

This commit is contained in:
PikalaxALT
2020-01-31 15:30:52 -05:00
parent 7d77b93123
commit 2d4c004004
5 changed files with 148 additions and 153 deletions
+1 -4
View File
@@ -4,11 +4,8 @@
#include "global.h" #include "global.h"
#include "main.h" #include "main.h"
/* TODOs: /* TODOs:
* - split files
* - documentation * - documentation
* - decompile librfu_intr.s once arm support is back again
(for internal structs not documented in SDK)
* - check if any field needs to be volatile * - check if any field needs to be volatile
* - check if field names make sense * - check if field names make sense
*/ */
-1
View File
@@ -323,7 +323,6 @@ SECTIONS {
src/agb_flash_le.o(.text); src/agb_flash_le.o(.text);
src/librfu_stwi.o(.text); src/librfu_stwi.o(.text);
src/librfu_intr.o(.text); src/librfu_intr.o(.text);
asm/librfu_intr.o(.text);
src/librfu_rfu.o(.text); src/librfu_rfu.o(.text);
src/librfu_sio32id.o(.text); src/librfu_sio32id.o(.text);
src/isagbprn.o(.text); src/isagbprn.o(.text);
+30 -31
View File
@@ -35,7 +35,7 @@ static void sio32intr_clock_master(void)
STWI_set_timer_in_RAM(80); STWI_set_timer_in_RAM(80);
regSIODATA32 = REG_SIODATA32; regSIODATA32 = REG_SIODATA32;
if (gSTWIStatus->state == 0) if (gSTWIStatus->state == 0) // master send req
{ {
if (regSIODATA32 == 0x80000000) if (regSIODATA32 == 0x80000000)
{ {
@@ -46,7 +46,7 @@ static void sio32intr_clock_master(void)
} }
else else
{ {
gSTWIStatus->state = 1; gSTWIStatus->state = 1; // master wait ack
REG_SIODATA32 = 0x80000000; REG_SIODATA32 = 0x80000000;
} }
} }
@@ -57,7 +57,7 @@ static void sio32intr_clock_master(void)
return; return;
} }
} }
else if (gSTWIStatus->state == 1) else if (gSTWIStatus->state == 1) // master wait ack
{ {
if ((regSIODATA32 & 0xFFFF0000) == 0x99660000) if ((regSIODATA32 & 0xFFFF0000) == 0x99660000)
{ {
@@ -68,12 +68,12 @@ static void sio32intr_clock_master(void)
gSTWIStatus->ackLength = ackLen = regSIODATA32 >> 8; gSTWIStatus->ackLength = ackLen = regSIODATA32 >> 8;
if ((ackLen = gSTWIStatus->ackLength) >= gSTWIStatus->ackNext) if ((ackLen = gSTWIStatus->ackLength) >= gSTWIStatus->ackNext)
{ {
gSTWIStatus->state = 2; gSTWIStatus->state = 2; // master receive ack
REG_SIODATA32 = 0x80000000; REG_SIODATA32 = 0x80000000;
} }
else else
{ {
gSTWIStatus->state = 3; gSTWIStatus->state = 3; // master done ack
} }
} }
else else
@@ -83,12 +83,12 @@ static void sio32intr_clock_master(void)
return; return;
} }
} }
else if (gSTWIStatus->state == 2) else if (gSTWIStatus->state == 2) // master receive ack
{ {
((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->ackNext] = regSIODATA32; ((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->ackNext] = regSIODATA32;
gSTWIStatus->ackNext++; gSTWIStatus->ackNext++;
if (gSTWIStatus->ackLength < gSTWIStatus->ackNext) if (gSTWIStatus->ackLength < gSTWIStatus->ackNext)
gSTWIStatus->state = 3; gSTWIStatus->state = 3; // master done ack
else else
REG_SIODATA32 = 0x80000000; REG_SIODATA32 = 0x80000000;
} }
@@ -103,7 +103,7 @@ static void sio32intr_clock_master(void)
STWI_stop_timer_in_RAM(); STWI_stop_timer_in_RAM();
if (gSTWIStatus->state == 3) if (gSTWIStatus->state == 3) // master done ack
{ {
if ( if (
gSTWIStatus->ackActiveCommand == (0x80 | ID_MS_CHANGE_REQ) gSTWIStatus->ackActiveCommand == (0x80 | ID_MS_CHANGE_REQ)
@@ -113,25 +113,24 @@ static void sio32intr_clock_master(void)
) )
{ {
gSTWIStatus->msMode = 0; gSTWIStatus->msMode = AGB_CLK_SLAVE;
REG_SIODATA32 = 0x80000000; REG_SIODATA32 = 0x80000000;
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS;
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS | SIO_ENABLE; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS | SIO_ENABLE;
gSTWIStatus->state = 5; gSTWIStatus->state = 5; // slave receive req init
} }
else else
{ {
if (gSTWIStatus->ackActiveCommand == 0xEE) if (gSTWIStatus->ackActiveCommand == 0xEE)
{ {
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
gSTWIStatus->state = 4; gSTWIStatus->state = 4; // error
gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION; gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION;
} }
else else
{ {
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
gSTWIStatus->state = 4; gSTWIStatus->state = 4; // error
} }
} }
gSTWIStatus->unk_2c = 0; gSTWIStatus->unk_2c = 0;
@@ -157,7 +156,7 @@ static void sio32intr_clock_slave(void)
return; return;
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS | SIO_MULTI_SD; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS | SIO_MULTI_SD;
regSIODATA32 = REG_SIODATA32; regSIODATA32 = REG_SIODATA32;
if (gSTWIStatus->state == 5) if (gSTWIStatus->state == 5) // slave receive req init
{ {
((u32*)gSTWIStatus->rxPacket)[0] = regSIODATA32; ((u32*)gSTWIStatus->rxPacket)[0] = regSIODATA32;
gSTWIStatus->reqNext = 1; gSTWIStatus->reqNext = 1;
@@ -191,17 +190,17 @@ static void sio32intr_clock_slave(void)
((u32*)gSTWIStatus->txPacket)[1] = 2; ((u32*)gSTWIStatus->txPacket)[1] = 2;
} }
gSTWIStatus->ackLength = 1; gSTWIStatus->ackLength = 1;
gSTWIStatus->error = 3; gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION;
} }
REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[0]; REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[0];
gSTWIStatus->ackNext = 1; gSTWIStatus->ackNext = 1;
gSTWIStatus->state = 7; gSTWIStatus->state = 7; // slave send ack
} }
else else
{ {
REG_SIODATA32 = 0x80000000; REG_SIODATA32 = 0x80000000;
gSTWIStatus->reqNext = 1; gSTWIStatus->reqNext = 1;
gSTWIStatus->state = 6; gSTWIStatus->state = 6; // slave receive req
} }
} }
else else
@@ -211,7 +210,7 @@ static void sio32intr_clock_slave(void)
return; return;
} }
} }
else if (gSTWIStatus->state == 6) else if (gSTWIStatus->state == 6) // slave receive req
{ {
((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->reqNext] = regSIODATA32; ((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->reqNext] = regSIODATA32;
gSTWIStatus->reqNext++; gSTWIStatus->reqNext++;
@@ -239,24 +238,24 @@ static void sio32intr_clock_slave(void)
((u32*)gSTWIStatus->txPacket)[1] = 2; ((u32*)gSTWIStatus->txPacket)[1] = 2;
} }
gSTWIStatus->ackLength = 1; gSTWIStatus->ackLength = 1;
gSTWIStatus->error = 3; gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION;
} }
REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[0]; REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[0];
gSTWIStatus->ackNext = 1; gSTWIStatus->ackNext = 1;
gSTWIStatus->state = 7; gSTWIStatus->state = 7; // slave send ack
} }
else else
{ {
REG_SIODATA32 = 0x80000000; REG_SIODATA32 = 0x80000000;
} }
} }
else if (gSTWIStatus->state == 7) else if (gSTWIStatus->state == 7) // slave send ack
{ {
if (regSIODATA32 == 0x80000000) if (regSIODATA32 == 0x80000000)
{ {
if (gSTWIStatus->ackLength < gSTWIStatus->ackNext) if (gSTWIStatus->ackLength < gSTWIStatus->ackNext)
{ {
gSTWIStatus->state = 8; gSTWIStatus->state = 8; // slave done ack
} }
else else
{ {
@@ -273,11 +272,11 @@ static void sio32intr_clock_slave(void)
} }
if (handshake_wait(1) == 1) if (handshake_wait(1) == 1)
return; return;
if (gSTWIStatus->state == 8) if (gSTWIStatus->state == 8) // slave done ack
{ {
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS;
STWI_stop_timer_in_RAM(); STWI_stop_timer_in_RAM();
if (gSTWIStatus->error == 3) if (gSTWIStatus->error == ERR_REQ_CMD_ACK_REJECTION)
{ {
STWI_init_slave(); STWI_init_slave();
if (gSTWIStatus->callbackS != NULL) if (gSTWIStatus->callbackS != NULL)
@@ -291,7 +290,7 @@ static void sio32intr_clock_slave(void)
REG_SIOCNT = 0; 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;
gSTWIStatus->msMode = AGB_CLK_MASTER; gSTWIStatus->msMode = AGB_CLK_MASTER;
gSTWIStatus->state = 0; gSTWIStatus->state = 0; // master send req
if (gSTWIStatus->callbackS != NULL) if (gSTWIStatus->callbackS != NULL)
{ {
Callback_Dummy_S((gSTWIStatus->reqLength << 8) | (gSTWIStatus->reqActiveCommand), gSTWIStatus->callbackS); Callback_Dummy_S((gSTWIStatus->reqLength << 8) | (gSTWIStatus->reqActiveCommand), gSTWIStatus->callbackS);
@@ -339,19 +338,19 @@ static void STWI_set_timer_in_RAM(u8 count)
switch (count) switch (count)
{ {
case 50: case 50:
*regTMCNTL = -0x335; *regTMCNTL = 0xFCCB;
gSTWIStatus->timerState = 1; gSTWIStatus->timerState = 1;
break; break;
case 80: case 80:
*regTMCNTL = -0x520; *regTMCNTL = 0xFAE0;
gSTWIStatus->timerState = 2; gSTWIStatus->timerState = 2;
break; break;
case 100: case 100:
*regTMCNTL = -0x66a; *regTMCNTL = 0xF996;
gSTWIStatus->timerState = 3; gSTWIStatus->timerState = 3;
break; break;
case 130: case 130:
*regTMCNTL = -0x853; *regTMCNTL = 0xF7AD;
gSTWIStatus->timerState = 4; gSTWIStatus->timerState = 4;
break; break;
} }
@@ -369,8 +368,8 @@ static void STWI_stop_timer_in_RAM(void)
static void STWI_init_slave(void) static void STWI_init_slave(void)
{ {
gSTWIStatus->state = 5; gSTWIStatus->state = 5; // slave receive req init
gSTWIStatus->msMode = 0; gSTWIStatus->msMode = AGB_CLK_SLAVE;
gSTWIStatus->reqLength = 0; gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0; gSTWIStatus->reqNext = 0;
gSTWIStatus->reqActiveCommand = 0; gSTWIStatus->reqActiveCommand = 0;
+109 -109
View File
@@ -29,27 +29,27 @@ struct RfuLocalStruct
u16 unk06; u16 unk06;
}; };
static void rfu_CB_defaultCallback(u8, u16); static void rfu_CB_defaultCallback(u8 reqCommand, u16 reqResult);
static void rfu_CB_reset(u8, u16); static void rfu_CB_reset(u8 reqCommand, u16 reqResult);
static void rfu_CB_configGameData(u8, u16); static void rfu_CB_configGameData(u8 reqCommand, u16 reqResult);
static void rfu_CB_stopMode(u8, u16); static void rfu_CB_stopMode(u8 reqCommand, u16 reqResult);
static void rfu_CB_startSearchChild(u8, u16); static void rfu_CB_startSearchChild(u8 reqCommand, u16 reqResult);
static void rfu_CB_pollAndEndSearchChild(u8, u16); static void rfu_CB_pollAndEndSearchChild(u8 reqCommand, u16 reqResult);
static void rfu_CB_startSearchParent(u8, u16); static void rfu_CB_startSearchParent(u8 reqCommand, u16 reqResult);
static void rfu_CB_pollSearchParent(u8, u16); static void rfu_CB_pollSearchParent(u8 reqCommand, u16 reqResult);
static void rfu_CB_pollConnectParent(u8, u16); static void rfu_CB_pollConnectParent(u8 reqCommand, u16 reqResult);
static void rfu_CB_pollConnectParent(u8, u16); static void rfu_CB_pollConnectParent(u8 reqCommand, u16 reqResult);
static void rfu_CB_disconnect(u8, u16); static void rfu_CB_disconnect(u8 reqCommand, u16 reqResult);
static void rfu_CB_CHILD_pollConnectRecovery(u8, u16); static void rfu_CB_CHILD_pollConnectRecovery(u8 reqCommand, u16 reqResult);
static void rfu_CB_sendData(UNUSED u8, u16); static void rfu_CB_sendData(UNUSED u8 reqCommand, u16 reqResult);
static void rfu_CB_sendData2(UNUSED u8, u16); static void rfu_CB_sendData2(UNUSED u8 reqCommand, u16 reqResult);
static void rfu_CB_sendData3(u8, u16); static void rfu_CB_sendData3(u8 reqCommand, u16 reqResult);
static void rfu_CB_recvData(u8, u16); static void rfu_CB_recvData(u8 reqCommand, u16 reqResult);
static void rfu_enableREQCallback(bool8); static void rfu_enableREQCallback(bool8 enable);
static void rfu_STC_clearAPIVariables(void); static void rfu_STC_clearAPIVariables(void);
static void rfu_STC_readChildList(void); static void rfu_STC_readChildList(void);
static void rfu_STC_readParentCandidateList(void); static void rfu_STC_readParentCandidateList(void);
static void rfu_STC_REQ_callback(u8, u16); static void rfu_STC_REQ_callback(u8 reqCommand, u16 reqResult);
static void rfu_STC_removeLinkData(u8, u8); static void rfu_STC_removeLinkData(u8, u8);
static void rfu_STC_fastCopy(const u8 **, u8 **, s32); static void rfu_STC_fastCopy(const u8 **, u8 **, s32);
static void rfu_STC_clearLinkStatus(u8); static void rfu_STC_clearLinkStatus(u8);
@@ -229,23 +229,23 @@ static void rfu_enableREQCallback(bool8 enable)
gRfuStatic->flags &= 0xF7; gRfuStatic->flags &= 0xF7;
} }
static void rfu_STC_REQ_callback(u8 r5, u16 reqResult) static void rfu_STC_REQ_callback(u8 reqCommand, u16 reqResult)
{ {
STWI_set_Callback_M(rfu_CB_defaultCallback); STWI_set_Callback_M(rfu_CB_defaultCallback);
gRfuStatic->reqResult = reqResult; gRfuStatic->reqResult = reqResult;
if (gRfuStatic->flags & 8) if (gRfuStatic->flags & 8)
gRfuFixed->reqCallback(r5, reqResult); gRfuFixed->reqCallback(reqCommand, reqResult);
} }
static void rfu_CB_defaultCallback(u8 r0, u16 reqResult) static void rfu_CB_defaultCallback(u8 reqCommand, u16 reqResult)
{ {
s32 r5; s32 r5;
u8 i; u8 i;
if (r0 == 0xFF) if (reqCommand == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ)
{ {
if (gRfuStatic->flags & 8) if (gRfuStatic->flags & 8)
gRfuFixed->reqCallback(r0, reqResult); gRfuFixed->reqCallback(reqCommand, reqResult);
r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
for (i = 0; i < RFU_CHILD_MAX; ++i) for (i = 0; i < RFU_CHILD_MAX; ++i)
if ((r5 >> i) & 1) if ((r5 >> i) & 1)
@@ -305,14 +305,14 @@ void rfu_REQ_stopMode(void)
if (REG_IME == 0) if (REG_IME == 0)
{ {
rfu_STC_REQ_callback(61, 6); rfu_STC_REQ_callback(ID_STOP_MODE_REQ, 6);
gSTWIStatus->error = ERR_REQ_CMD_IME_DISABLE; gSTWIStatus->error = ERR_REQ_CMD_IME_DISABLE;
} }
else else
{ {
AgbRFU_SoftReset(); AgbRFU_SoftReset();
rfu_STC_clearAPIVariables(); rfu_STC_clearAPIVariables();
if (AgbRFU_checkID(8) == 0x8001) if (AgbRFU_checkID(8) == RFU_ID)
{ {
timerReg = &REG_TMCNT(gSTWIStatus->timerSelect); timerReg = &REG_TMCNT(gSTWIStatus->timerSelect);
*timerReg = 0; *timerReg = 0;
@@ -326,16 +326,16 @@ void rfu_REQ_stopMode(void)
else else
{ {
REG_SIOCNT = SIO_MULTI_MODE; REG_SIOCNT = SIO_MULTI_MODE;
rfu_STC_REQ_callback(61, 0); rfu_STC_REQ_callback(ID_STOP_MODE_REQ, 0);
} }
} }
} }
static void rfu_CB_stopMode(u8 a1, u16 reqResult) static void rfu_CB_stopMode(u8 reqCommand, u16 reqResult)
{ {
if (reqResult == 0) if (reqResult == 0)
REG_SIOCNT = SIO_MULTI_MODE; REG_SIOCNT = SIO_MULTI_MODE;
rfu_STC_REQ_callback(a1, reqResult); rfu_STC_REQ_callback(reqCommand, reqResult);
} }
u32 rfu_REQBN_softReset_and_checkID(void) u32 rfu_REQBN_softReset_and_checkID(void)
@@ -357,11 +357,11 @@ void rfu_REQ_reset(void)
STWI_send_ResetREQ(); STWI_send_ResetREQ();
} }
static void rfu_CB_reset(u8 a1, u16 reqResult) static void rfu_CB_reset(u8 reqCommand, u16 reqResult)
{ {
if (reqResult == 0) if (reqResult == 0)
rfu_STC_clearAPIVariables(); rfu_STC_clearAPIVariables();
rfu_STC_REQ_callback(a1, reqResult); rfu_STC_REQ_callback(reqCommand, reqResult);
} }
void rfu_REQ_configSystem(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer) void rfu_REQ_configSystem(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer)
@@ -451,29 +451,29 @@ void rfu_REQ_startSearchChild(void)
if (r1 == 0) if (r1 == 0)
{ {
if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0)
rfu_STC_clearLinkStatus(1); rfu_STC_clearLinkStatus(MODE_PARENT);
} }
else else
{ {
rfu_STC_REQ_callback(25, r1); rfu_STC_REQ_callback(ID_SC_START_REQ, r1);
} }
STWI_set_Callback_M(rfu_CB_startSearchChild); STWI_set_Callback_M(rfu_CB_startSearchChild);
STWI_send_SC_StartREQ(); STWI_send_SC_StartREQ();
} }
static void rfu_CB_startSearchChild(u8 r3, u16 reqResult) static void rfu_CB_startSearchChild(u8 reqCommand, u16 reqResult)
{ {
if (reqResult == 0) if (reqResult == 0)
gRfuStatic->SCStartFlag = 1; gRfuStatic->SCStartFlag = 1;
rfu_STC_REQ_callback(r3, reqResult); rfu_STC_REQ_callback(reqCommand, reqResult);
} }
static void rfu_STC_clearLinkStatus(u8 r4) static void rfu_STC_clearLinkStatus(u8 parentChild)
{ {
u8 i; u8 i;
rfu_clearAllSlot(); rfu_clearAllSlot();
if (r4 != 0) if (parentChild != MODE_CHILD)
{ {
CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner)); CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner));
gRfuLinkStatus->findParentCount = 0; gRfuLinkStatus->findParentCount = 0;
@@ -498,11 +498,11 @@ void rfu_REQ_endSearchChild(void)
STWI_send_SC_EndREQ(); STWI_send_SC_EndREQ();
} }
static void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult) static void rfu_CB_pollAndEndSearchChild(u8 reqCommand, u16 reqResult)
{ {
if (reqResult == 0) if (reqResult == 0)
rfu_STC_readChildList(); rfu_STC_readChildList();
if (r4 == 26) if (reqCommand == ID_SC_POLL_REQ)
{ {
if (gRfuLinkStatus->my.id == 0) if (gRfuLinkStatus->my.id == 0)
{ {
@@ -512,13 +512,13 @@ static void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult)
gRfuLinkStatus->my.id = *(u16 *)&gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; gRfuLinkStatus->my.id = *(u16 *)&gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0];
} }
} }
else if (r4 == 27) else if (reqCommand == ID_SC_END_REQ)
{ {
if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) if (gRfuLinkStatus->parentChild == MODE_NEUTRAL)
gRfuLinkStatus->my.id = 0; gRfuLinkStatus->my.id = 0;
gRfuStatic->SCStartFlag = 0; gRfuStatic->SCStartFlag = 0;
} }
rfu_STC_REQ_callback(r4, reqResult); rfu_STC_REQ_callback(reqCommand, reqResult);
} }
static void rfu_STC_readChildList(void) static void rfu_STC_readChildList(void)
@@ -555,7 +555,7 @@ static void rfu_STC_readChildList(void)
if (gRfuStatic->lsFixedCount[r2] >= 4) if (gRfuStatic->lsFixedCount[r2] >= 4)
{ {
gRfuStatic->lsFixedCount[r2] = 0; gRfuStatic->lsFixedCount[r2] = 0;
gRfuLinkStatus->strength[r2] = 0xFF; gRfuLinkStatus->strength[r2] = 255;
gRfuLinkStatus->connSlotFlag |= 1 << r2; gRfuLinkStatus->connSlotFlag |= 1 << r2;
++gRfuLinkStatus->connCount; ++gRfuLinkStatus->connCount;
gRfuLinkStatus->partner[r2].id = *(u16 *)r4; gRfuLinkStatus->partner[r2].id = *(u16 *)r4;
@@ -575,11 +575,11 @@ void rfu_REQ_startSearchParent(void)
STWI_send_SP_StartREQ(); STWI_send_SP_StartREQ();
} }
static void rfu_CB_startSearchParent(u8 r5, u16 reqResult) static void rfu_CB_startSearchParent(u8 reqCommand, u16 reqResult)
{ {
if (reqResult == 0) if (reqResult == 0)
rfu_STC_clearLinkStatus(0); rfu_STC_clearLinkStatus(MODE_CHILD);
rfu_STC_REQ_callback(r5, reqResult); rfu_STC_REQ_callback(reqCommand, reqResult);
} }
void rfu_REQ_pollSearchParent(void) void rfu_REQ_pollSearchParent(void)
@@ -588,11 +588,11 @@ void rfu_REQ_pollSearchParent(void)
STWI_send_SP_PollingREQ(); STWI_send_SP_PollingREQ();
} }
static void rfu_CB_pollSearchParent(u8 r5, u16 reqResult) static void rfu_CB_pollSearchParent(u8 reqCommand, u16 reqResult)
{ {
if (reqResult == 0) if (reqResult == 0)
rfu_STC_readParentCandidateList(); rfu_STC_readParentCandidateList();
rfu_STC_REQ_callback(r5, reqResult); rfu_STC_REQ_callback(reqCommand, reqResult);
} }
void rfu_REQ_endSearchParent(void) void rfu_REQ_endSearchParent(void)
@@ -665,7 +665,7 @@ void rfu_REQ_startConnectParent(u16 pid)
} }
else else
{ {
rfu_STC_REQ_callback(31, r3); rfu_STC_REQ_callback(ID_CP_START_REQ, r3);
} }
} }
@@ -797,13 +797,13 @@ u16 rfu_syncVBlank(void)
u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason, u8 *parentBmLinkRecoverySlot) u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason, u8 *parentBmLinkRecoverySlot)
{ {
u8 sp08 = 0; u8 reasonMaybe = 0;
u8 sp0C = 0; u8 reqResult = 0;
u8 i; u8 i;
s32 sp10, sp14; s32 sp10, sp14;
u8 *r2; u8 *r2;
u8 r9, r6, r3, connSlotFlag, r0; u8 r9, r6, r3, connSlotFlag, r0;
*bmLinkLossSlot = 0; *bmLinkLossSlot = 0;
*linkLossReason = REASON_DISCONNECTED; *linkLossReason = REASON_DISCONNECTED;
*parentBmLinkRecoverySlot = 0; *parentBmLinkRecoverySlot = 0;
@@ -814,21 +814,21 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
if (gRfuStatic->nowWatchInterval == 0) if (gRfuStatic->nowWatchInterval == 0)
{ {
gRfuStatic->nowWatchInterval = gRfuLinkStatus->watchInterval; gRfuStatic->nowWatchInterval = gRfuLinkStatus->watchInterval;
sp08 = 1; reasonMaybe = 1;
} }
if ((u8)reqCommandId == 41) if ((u8)reqCommandId == ID_DISCONNECTED_AND_CHANGE_REQ)
{ {
u8 *r1 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data; u8 *r1 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data;
*bmLinkLossSlot = r1[4]; *bmLinkLossSlot = r1[4];
*linkLossReason = r1[5]; *linkLossReason = r1[5];
if (*linkLossReason == REASON_LINK_LOSS) if (*linkLossReason == REASON_LINK_LOSS)
*bmLinkLossSlot = gRfuLinkStatus->connSlotFlag; *bmLinkLossSlot = gRfuLinkStatus->connSlotFlag;
sp08 = 2; reasonMaybe = 2;
} }
else else
{ {
if (reqCommandId == 310) if (reqCommandId == 0x0136)
{ {
r6 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[5]; r6 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[5];
r6 ^= gRfuLinkStatus->connSlotFlag; r6 ^= gRfuLinkStatus->connSlotFlag;
@@ -843,15 +843,15 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
} }
} }
} }
if (sp08 == 0) if (reasonMaybe == 0)
return 0; return 0;
} }
sp10 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command; sp10 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command;
sp14 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; sp14 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0];
STWI_set_Callback_M(rfu_CB_defaultCallback); STWI_set_Callback_M(rfu_CB_defaultCallback);
STWI_send_LinkStatusREQ(); STWI_send_LinkStatusREQ();
sp0C = STWI_poll_CommandEnd(); reqResult = STWI_poll_CommandEnd();
if (sp0C == 0) if (reqResult == 0)
{ {
r2 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; r2 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
for (i = 0; i < RFU_CHILD_MAX; ++i) for (i = 0; i < RFU_CHILD_MAX; ++i)
@@ -861,15 +861,15 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
} }
else else
{ {
rfu_STC_REQ_callback(17, sp0C); rfu_STC_REQ_callback(ID_LINK_STATUS_REQ, reqResult);
return sp0C; return reqResult;
} }
for (; i < RFU_CHILD_MAX; ++i) for (; i < RFU_CHILD_MAX; ++i)
{ {
r6 = 1 << i; r6 = 1 << i;
if (sp0C == 0) if (reqResult == 0)
{ {
if (sp08 == 1 && (gRfuLinkStatus->connSlotFlag & r6)) if (reasonMaybe == 1 && (gRfuLinkStatus->connSlotFlag & r6))
{ {
if (gRfuLinkStatus->strength[i] == 0) if (gRfuLinkStatus->strength[i] == 0)
{ {
@@ -879,7 +879,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
if (gRfuStatic->linkEmergencyFlag[i] > 3) if (gRfuStatic->linkEmergencyFlag[i] > 3)
{ {
*bmLinkLossSlot |= r6; *bmLinkLossSlot |= r6;
*linkLossReason = sp08; // why not directly use REASON_LINK_LOSS? *linkLossReason = reasonMaybe; // why not directly use REASON_LINK_LOSS?
} }
} }
else else
@@ -890,7 +890,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0)
{ {
*bmLinkLossSlot |= r6; *bmLinkLossSlot |= r6;
*linkLossReason = sp08; // why not directly use REASON_LINK_LOSS? *linkLossReason = reasonMaybe; // why not directly use REASON_LINK_LOSS?
} }
else else
{ {
@@ -900,7 +900,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
STWI_send_DisconnectREQ(gRfuLinkStatus->connSlotFlag); STWI_send_DisconnectREQ(gRfuLinkStatus->connSlotFlag);
STWI_poll_CommandEnd(); STWI_poll_CommandEnd();
*bmLinkLossSlot |= r6; *bmLinkLossSlot |= r6;
*linkLossReason = sp08; // why not directly use REASON_LINK_LOSS? *linkLossReason = reasonMaybe; // why not directly use REASON_LINK_LOSS?
} }
} }
} }
@@ -908,7 +908,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
} }
else else
{ {
gRfuStatic->linkEmergencyFlag[i] = sp0C; // why not directly use 0? gRfuStatic->linkEmergencyFlag[i] = reqResult; // why not directly use 0?
} }
} }
if (gRfuLinkStatus->parentChild == MODE_PARENT && gRfuLinkStatus->strength[i] != 0) if (gRfuLinkStatus->parentChild == MODE_PARENT && gRfuLinkStatus->strength[i] != 0)
@@ -968,23 +968,23 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
return 0; return 0;
} }
static void rfu_STC_removeLinkData(u8 r7, u8 r12) static void rfu_STC_removeLinkData(u8 bmConnectedPartnerId, u8 bmDisconnect)
{ {
u8 r5 = 1 << r7; u8 bmLinkLossFlag = 1 << bmConnectedPartnerId;
s32 r6; s32 bmLinkRetainedFlag;
if ((gRfuLinkStatus->connSlotFlag & r5) && gRfuLinkStatus->connCount != 0) if ((gRfuLinkStatus->connSlotFlag & bmLinkLossFlag) && gRfuLinkStatus->connCount != 0)
--gRfuLinkStatus->connCount; --gRfuLinkStatus->connCount;
gRfuLinkStatus->connSlotFlag &= r6 = ~r5; gRfuLinkStatus->connSlotFlag &= bmLinkRetainedFlag = ~bmLinkLossFlag;
gRfuLinkStatus->linkLossSlotFlag |= r5; gRfuLinkStatus->linkLossSlotFlag |= bmLinkLossFlag;
if ((*(u32 *)gRfuLinkStatus & 0xFF00FF) == 0) if (gRfuLinkStatus->parentChild == MODE_CHILD && gRfuLinkStatus->connSlotFlag == 0)
gRfuLinkStatus->parentChild = MODE_NEUTRAL; gRfuLinkStatus->parentChild = MODE_NEUTRAL;
if (r12 != 0) if (bmDisconnect)
{ {
CpuFill16(0, &gRfuLinkStatus->partner[r7], sizeof(struct RfuTgtData)); CpuFill16(0, &gRfuLinkStatus->partner[bmConnectedPartnerId], sizeof(struct RfuTgtData));
gRfuLinkStatus->linkLossSlotFlag &= r6; gRfuLinkStatus->linkLossSlotFlag &= bmLinkRetainedFlag;
gRfuLinkStatus->getNameFlag &= r6; gRfuLinkStatus->getNameFlag &= bmLinkRetainedFlag;
gRfuLinkStatus->strength[r7] = 0; gRfuLinkStatus->strength[bmConnectedPartnerId] = 0;
} }
} }
@@ -1005,7 +1005,7 @@ void rfu_REQ_disconnect(u8 bmDisconnectSlot)
STWI_send_SC_EndREQ(), STWI_send_SC_EndREQ(),
(r1 = STWI_poll_CommandEnd()) != 0)) (r1 = STWI_poll_CommandEnd()) != 0))
{ {
rfu_STC_REQ_callback(27, r1); rfu_STC_REQ_callback(ID_SC_END_REQ, r1);
} }
else else
{ {
@@ -1015,20 +1015,20 @@ void rfu_REQ_disconnect(u8 bmDisconnectSlot)
} }
} }
static void rfu_CB_disconnect(u8 r6, u16 r5) static void rfu_CB_disconnect(u8 reqCommand, u16 reqResult)
{ {
u8 r4, r0; u8 r4, r0;
if (r5 == 3 && gRfuLinkStatus->parentChild == MODE_CHILD) if (reqResult == 3 && gRfuLinkStatus->parentChild == MODE_CHILD)
{ {
STWI_set_Callback_M(rfu_CB_defaultCallback); STWI_set_Callback_M(rfu_CB_defaultCallback);
STWI_send_SystemStatusREQ(); STWI_send_SystemStatusREQ();
if (STWI_poll_CommandEnd() == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) if (STWI_poll_CommandEnd() == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0)
r5 = 0; reqResult = 0;
} }
gRfuStatic->recoveryBmSlot &= gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; gRfuStatic->recoveryBmSlot &= gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8] = gRfuStatic->recoveryBmSlot; gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8] = gRfuStatic->recoveryBmSlot;
if (r5 == 0) if (reqResult == 0)
{ {
for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4) for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4)
{ {
@@ -1039,14 +1039,14 @@ static void rfu_CB_disconnect(u8 r6, u16 r5)
} }
if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) == 0) if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) == 0)
gRfuLinkStatus->parentChild = MODE_NEUTRAL; gRfuLinkStatus->parentChild = MODE_NEUTRAL;
rfu_STC_REQ_callback(r6, r5); rfu_STC_REQ_callback(reqCommand, reqResult);
if (gRfuStatic->SCStartFlag) if (gRfuStatic->SCStartFlag)
{ {
STWI_set_Callback_M(rfu_CB_defaultCallback); STWI_set_Callback_M(rfu_CB_defaultCallback);
STWI_send_SC_StartREQ(); STWI_send_SC_StartREQ();
r5 = STWI_poll_CommandEnd(); reqResult = STWI_poll_CommandEnd();
if (r5 != 0) if (reqResult != 0)
rfu_STC_REQ_callback(25, r5); rfu_STC_REQ_callback(ID_SC_START_REQ, reqResult);
} }
} }
@@ -1068,12 +1068,12 @@ void rfu_REQ_CHILD_pollConnectRecovery(void)
STWI_send_CPR_PollingREQ(); STWI_send_CPR_PollingREQ();
} }
static void rfu_CB_CHILD_pollConnectRecovery(u8 r8, u16 r7) static void rfu_CB_CHILD_pollConnectRecovery(u8 reqCommand, u16 reqResult)
{ {
u8 r3, r4; u8 r3, r4;
struct RfuLinkStatus *r2; struct RfuLinkStatus *r2;
if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] == 0 && gRfuStatic->recoveryBmSlot) if (reqResult == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] == 0 && gRfuStatic->recoveryBmSlot)
{ {
gRfuLinkStatus->parentChild = MODE_CHILD; gRfuLinkStatus->parentChild = MODE_CHILD;
for (r4 = 0; r4 < NELEMS(gRfuStatic->linkEmergencyFlag); ++r4) for (r4 = 0; r4 < NELEMS(gRfuStatic->linkEmergencyFlag); ++r4)
@@ -1090,7 +1090,7 @@ static void rfu_CB_CHILD_pollConnectRecovery(u8 r8, u16 r7)
} }
gRfuStatic->recoveryBmSlot = 0; gRfuStatic->recoveryBmSlot = 0;
} }
rfu_STC_REQ_callback(r8, r7); rfu_STC_REQ_callback(reqCommand, reqResult);
} }
u16 rfu_CHILD_getConnectRecoveryStatus(u8 *status) u16 rfu_CHILD_getConnectRecoveryStatus(u8 *status)
@@ -1127,14 +1127,14 @@ static void rfu_STC_fastCopy(const u8 **src_p, u8 **dst_p, s32 size)
void rfu_REQ_changeMasterSlave(void) void rfu_REQ_changeMasterSlave(void)
{ {
if (STWI_read_status(1) == 1) if (STWI_read_status(1) == AGB_CLK_MASTER)
{ {
STWI_set_Callback_M(rfu_STC_REQ_callback); STWI_set_Callback_M(rfu_STC_REQ_callback);
STWI_send_MS_ChangeREQ(); STWI_send_MS_ChangeREQ();
} }
else else
{ {
rfu_STC_REQ_callback(39, 0); rfu_STC_REQ_callback(ID_MS_CHANGE_REQ, 0);
} }
} }
@@ -1593,12 +1593,12 @@ void rfu_REQ_sendData(bool8 clockChangeFlag)
} }
} }
static void rfu_CB_sendData(UNUSED u8 r0, u16 r7) static void rfu_CB_sendData(UNUSED u8 reqCommand, u16 reqResult)
{ {
u8 r6; u8 r6;
struct NIComm *r4; struct NIComm *r4;
if (r7 == 0) if (reqResult == 0)
{ {
for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6) for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6)
{ {
@@ -1616,20 +1616,20 @@ static void rfu_CB_sendData(UNUSED u8 r0, u16 r7)
} }
} }
gRfuLinkStatus->LLFReadyFlag = 0; gRfuLinkStatus->LLFReadyFlag = 0;
rfu_STC_REQ_callback(36, r7); rfu_STC_REQ_callback(ID_DATA_TX_REQ, reqResult);
} }
static void rfu_CB_sendData2(UNUSED u8 r0, u16 r1) static void rfu_CB_sendData2(UNUSED u8 reqCommand, u16 reqResult)
{ {
rfu_STC_REQ_callback(36, r1); rfu_STC_REQ_callback(ID_DATA_TX_REQ, reqResult);
} }
static void rfu_CB_sendData3(u8 r0, u16 r1) static void rfu_CB_sendData3(u8 reqCommand, u16 reqResult)
{ {
if (r1 != 0) if (reqResult != 0)
rfu_STC_REQ_callback(36, r1); rfu_STC_REQ_callback(ID_DATA_TX_REQ, reqResult);
else if (r0 == 0xFF) else if (reqCommand == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ)
rfu_STC_REQ_callback(0xFF, 0); rfu_STC_REQ_callback(ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ, 0);
} }
static void rfu_constructSendLLFrame(void) static void rfu_constructSendLLFrame(void)
@@ -1784,13 +1784,13 @@ void rfu_REQ_recvData(void)
} }
} }
static void rfu_CB_recvData(u8 r9, u16 r7) static void rfu_CB_recvData(u8 reqCommand, u16 reqResult)
{ {
u8 r6; u8 r6;
struct RfuSlotStatusNI *r4; struct RfuSlotStatusNI *r4;
struct NIComm *r5; struct NIComm *r5;
if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1]) if (reqResult == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1])
{ {
gRfuStatic->NIEndRecvFlag = 0; gRfuStatic->NIEndRecvFlag = 0;
if (gRfuLinkStatus->parentChild == MODE_PARENT) if (gRfuLinkStatus->parentChild == MODE_PARENT)
@@ -1811,20 +1811,20 @@ static void rfu_CB_recvData(u8 r9, u16 r7)
} }
} }
if (gRfuStatic->recvErrorFlag) if (gRfuStatic->recvErrorFlag)
r7 = gRfuStatic->recvErrorFlag | ERR_DATA_RECV; reqResult = gRfuStatic->recvErrorFlag | ERR_DATA_RECV;
} }
rfu_STC_REQ_callback(r9, r7); rfu_STC_REQ_callback(reqCommand, reqResult);
} }
static void rfu_STC_PARENT_analyzeRecvPacket(void) static void rfu_STC_PARENT_analyzeRecvPacket(void)
{ {
u32 r3; u32 r3;
u8 r5; u8 r5;
u8 sp[4]; u8 sp[RFU_CHILD_MAX];
u8 *r6; u8 *r6;
r3 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] >> 8; r3 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] >> 8;
for (r5 = 0; r5 < NELEMS(sp); ++r5) for (r5 = 0; r5 < RFU_CHILD_MAX; ++r5)
{ {
sp[r5] = r3 & 0x1F; sp[r5] = r3 & 0x1F;
r3 >>= 5; r3 >>= 5;
@@ -1832,7 +1832,7 @@ static void rfu_STC_PARENT_analyzeRecvPacket(void)
gRfuStatic->NIEndRecvFlag |= 1 << r5; gRfuStatic->NIEndRecvFlag |= 1 << r5;
} }
r6 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8]; r6 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8];
for (r5 = 0; r5 < NELEMS(sp); ++r5) for (r5 = 0; r5 < RFU_CHILD_MAX; ++r5)
{ {
if (sp[r5]) if (sp[r5])
{ {
+8 -8
View File
@@ -28,8 +28,8 @@ void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, b
} }
gSTWIStatus->rxPacket = &interruptStruct->rxPacketAlloc; gSTWIStatus->rxPacket = &interruptStruct->rxPacketAlloc;
gSTWIStatus->txPacket = &interruptStruct->txPacketAlloc; gSTWIStatus->txPacket = &interruptStruct->txPacketAlloc;
gSTWIStatus->msMode = 1; gSTWIStatus->msMode = AGB_CLK_MASTER;
gSTWIStatus->state = 0; gSTWIStatus->state = 0; // master send req
gSTWIStatus->reqLength = 0; gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0; gSTWIStatus->reqNext = 0;
gSTWIStatus->ackLength = 0; gSTWIStatus->ackLength = 0;
@@ -71,7 +71,7 @@ void AgbRFU_SoftReset(void)
*timerH = 3; *timerH = 3;
REG_RCNT = 0x80A0; REG_RCNT = 0x80A0;
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
gSTWIStatus->state = 0; gSTWIStatus->state = 0; // master send req
gSTWIStatus->reqLength = 0; gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0; gSTWIStatus->reqNext = 0;
gSTWIStatus->reqActiveCommand = 0; gSTWIStatus->reqActiveCommand = 0;
@@ -81,7 +81,7 @@ void AgbRFU_SoftReset(void)
gSTWIStatus->timerState = 0; gSTWIStatus->timerState = 0;
gSTWIStatus->timerActive = 0; gSTWIStatus->timerActive = 0;
gSTWIStatus->error = 0; gSTWIStatus->error = 0;
gSTWIStatus->msMode = 1; gSTWIStatus->msMode = AGB_CLK_MASTER;
gSTWIStatus->recoveryCount = 0; gSTWIStatus->recoveryCount = 0;
gSTWIStatus->unk_2c = 0; gSTWIStatus->unk_2c = 0;
} }
@@ -571,7 +571,7 @@ static u16 STWI_init(u8 request)
{ {
gSTWIStatus->unk_2c = TRUE; gSTWIStatus->unk_2c = TRUE;
gSTWIStatus->reqActiveCommand = request; gSTWIStatus->reqActiveCommand = request;
gSTWIStatus->state = 0; gSTWIStatus->state = 0; // master send req
gSTWIStatus->reqLength = 0; gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0; gSTWIStatus->reqNext = 0;
gSTWIStatus->ackLength = 0; gSTWIStatus->ackLength = 0;
@@ -595,7 +595,7 @@ static s32 STWI_start_Command(void)
// but the cast here is required to avoid register issue // but the cast here is required to avoid register issue
*(u32 *)gSTWIStatus->txPacket->rfuPacket8.data = 0x99660000 | (gSTWIStatus->reqLength << 8) | gSTWIStatus->reqActiveCommand; *(u32 *)gSTWIStatus->txPacket->rfuPacket8.data = 0x99660000 | (gSTWIStatus->reqLength << 8) | gSTWIStatus->reqActiveCommand;
REG_SIODATA32 = gSTWIStatus->txPacket->rfuPacket32.command; REG_SIODATA32 = gSTWIStatus->txPacket->rfuPacket32.command;
gSTWIStatus->state = 0; gSTWIStatus->state = 0; // master send req
gSTWIStatus->reqNext = 1; gSTWIStatus->reqNext = 1;
imeTemp = REG_IME; imeTemp = REG_IME;
REG_IME = 0; REG_IME = 0;
@@ -628,7 +628,7 @@ static s32 STWI_restart_Command(void)
gSTWIStatus->unk_2c = 0; gSTWIStatus->unk_2c = 0;
if (gSTWIStatus->callbackM != NULL) if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error); gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error);
gSTWIStatus->state = 4; // TODO: what's 4 gSTWIStatus->state = 4; // error
} }
} }
return 0; return 0;
@@ -636,7 +636,7 @@ static s32 STWI_restart_Command(void)
static s32 STWI_reset_ClockCounter(void) static s32 STWI_reset_ClockCounter(void)
{ {
gSTWIStatus->state = 5; // TODO: what is 5 gSTWIStatus->state = 5; // slave receive req init
gSTWIStatus->reqLength = 0; gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0; gSTWIStatus->reqNext = 0;
REG_SIODATA32 = (1 << 31); REG_SIODATA32 = (1 << 31);