diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/bg_regs.h | 6 | ||||
-rw-r--r-- | include/event_data.h | 3 | ||||
-rw-r--r-- | include/librfu.h | 141 | ||||
-rw-r--r-- | include/link.h | 59 | ||||
-rw-r--r-- | include/link_rfu.h | 22 | ||||
-rw-r--r-- | include/main.h | 2 | ||||
-rw-r--r-- | include/overworld.h | 2 | ||||
-rw-r--r-- | include/strings.h | 7 | ||||
-rw-r--r-- | include/trade.h | 6 |
9 files changed, 232 insertions, 16 deletions
diff --git a/include/bg_regs.h b/include/bg_regs.h new file mode 100644 index 000000000..660b47d1e --- /dev/null +++ b/include/bg_regs.h @@ -0,0 +1,6 @@ +#ifndef GUARD_BG_REGS_H +#define GUARD_BG_REGS_H + +extern const u8 gBGControlRegOffsets[]; + +#endif //GUARD_BG_REGS_H diff --git a/include/event_data.h b/include/event_data.h index 5f455467d..036b0a325 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -36,9 +36,8 @@ bool32 sub_806E2BC(void); void sub_806E6FC(void); void sub_806E2D0(void); void sub_806E370(void); -bool32 sub_806E25C(void); +bool32 IsNationalPokedexEnabled(void); void sub_806E190(void); - extern u16 gSpecialVar_0x8000; extern u16 gSpecialVar_0x8001; extern u16 gSpecialVar_0x8002; diff --git a/include/librfu.h b/include/librfu.h index 90f69cb5a..69f0bb695 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -1,3 +1,6 @@ +#ifndef GUARD_LIBRFU_H +#define GUARD_LIBRFU_H + #include "main.h" enum @@ -116,8 +119,8 @@ struct RfuStruct void (*callbackM)(); void (*callbackS)(); u32 callbackID; - union RfuPacket *txPacket; - union RfuPacket *rxPacket; + union RfuPacket * txPacket; + union RfuPacket * rxPacket; vu8 unk_2c; u8 padding[3]; }; @@ -130,6 +133,136 @@ struct RfuIntrStruct u8 block2[0x30]; }; -extern struct RfuStruct *gRfuState; +struct RfuUnk1 +{ + u16 unk_0; + u8 unk_2; + u8 unk_3; + u8 fill_4[14]; + u8 unk_12; + u32 unk_14; + u32 unk_18; + struct RfuIntrStruct unk_1c; +}; + +struct RfuUnk2 +{ + u16 unk_0; + u16 unk_2; + u8 fill_4[0x16]; + u8 unk_1a; + u8 fill_1b[0x19]; + u16 unk_34; + u16 unk_36; + u8 fill_38[0x16]; + u8 unk_4e; + u8 fill_4f[0x12]; + u8 unk_61; + u8 fill_62[6]; + void *unk_68; + void *unk_6c; + u8 unk_70[0x70]; +}; + +struct RfuUnk3 +{ + u32 unk_0; + u32 unk_4; + u8 unk_8[0xD4]; + u32 unk_dc; +}; + +struct RfuUnk5Sub +{ + u16 unk_00; + u8 unk_02; + u16 unk_04; + struct UnkLinkRfuStruct_02022B14 unk_06; + u8 fill_13[1]; + u8 playerName[PLAYER_NAME_LENGTH + 1]; +}; + +struct RfuUnk5 +{ + u8 unk_00; + u8 unk_01; + u8 unk_02; + u8 unk_03; + u8 unk_04; + u8 unk_05; + u8 unk_06; + u8 unk_07; + u8 unk_08; + u8 filler_09[1]; + u8 unk_0a[4]; + u8 filler_0e[6]; + struct RfuUnk5Sub unk_14[4]; +}; + +extern struct RfuStruct * gRfuState; + +extern struct RfuUnk5 * gUnknown_3007460; +extern u32 *gUnknown_3007464; +extern struct RfuUnk3 * gUnknown_3007468; +extern struct RfuUnk2 * gUnknown_3007450[4]; +extern struct RfuUnk1 * gUnknown_3007440[4]; +extern struct { + u8 unk0; + u8 unk1; + u16 unk2; + u16 unk4; + u8 fill6[4]; + u16 unkA; +} gUnknown_3007470; + +extern void rfu_STC_clearAPIVariables(void); + +void STWI_init_all(struct RfuIntrStruct * interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam); +void rfu_REQ_stopMode(void); +void rfu_waitREQComplete(void); +u32 rfu_REQBN_softReset_and_checkID(void); +void rfu_REQ_sendData(u8); +void rfu_setMSCCallback(void (*func)(u16)); +void rfu_setREQCallback(void (*func)(u16, u16)); +bool8 rfu_getMasterSlave(void); +void rfu_REQBN_watchLink(u16 a0, u8 *a1, u8 *a2, u8 *a3); +bool16 rfu_syncVBlank(void); +void rfu_REQ_reset(void); +void rfu_REQ_configSystem(u16, u8, u8); +void rfu_REQ_configGameData(u8, u16, struct UnkLinkRfuStruct_02022B14 *, u8 *); +void rfu_REQ_startSearchChild(void); +void rfu_REQ_pollSearchChild(void); +void rfu_REQ_endSearchChild(void); +void rfu_REQ_startSearchParent(void); +void rfu_REQ_pollSearchParent(void); +void rfu_REQ_endSearchParent(void); +void rfu_REQ_startConnectParent(u16); +void rfu_REQ_pollConnectParent(void); +void rfu_REQ_endConnectParent(void); +void rfu_REQ_CHILD_startConnectRecovery(u8); +void rfu_REQ_CHILD_pollConnectRecovery(void); +void rfu_REQ_CHILD_endConnectRecovery(void); +void rfu_REQ_changeMasterSlave(void); +void rfu_REQ_RFUStatus(void); +void rfu_getRFUStatus(u8 *status); +u8 *rfu_getSTWIRecvBuffer(void); +u8 rfu_NI_CHILD_setSendGameName(u8 a0, u8 a1); +void rfu_clearSlot(u8 a0, u8 a1); +void rfu_clearAllSlot(void); +bool16 rfu_CHILD_getConnectRecoveryStatus(u8 *status); +bool16 rfu_getConnectParentStatus(u8 *status, u8 *a1); +bool16 rfu_UNI_PARENT_getDRAC_ACK(u8 *a0); +void rfu_REQ_disconnect(u8 who); +void rfu_changeSendTarget(u8 a0, u8 who, u8 a2); +void rfu_NI_stopReceivingData(u8 who); +u16 rfu_initializeAPI(u32 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam); +void rfu_setTimerInterrupt(u8 which, IntrFunc *intr); +void rfu_setRecvBuffer(u8 a0, u8 a1, void *a2, size_t a3); +bool16 rfu_UNI_setSendData(u8 flag, void *ptr, u8 size); +void rfu_REQ_recvData(void); +void rfu_UNI_readySendData(u8 a0); +void rfu_UNI_clearRecvNewDataFlag(u8 a0); +void rfu_REQ_PARENT_resumeRetransmitAndChange(void); +void rfu_NI_setSendData(u8, u8, const void *, u32); -void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam); +#endif // GUARD_LIBRFU_H diff --git a/include/link.h b/include/link.h index d5d3f08a3..51f103745 100644 --- a/include/link.h +++ b/include/link.h @@ -9,6 +9,9 @@ #define QUEUE_CAPACITY 50 #define BLOCK_BUFFER_SIZE 0x100 +#define LINK_SLAVE 0 +#define LINK_MASTER 8 + #define LINK_STAT_LOCAL_ID 0x00000003 #define LINK_STAT_PLAYER_COUNT 0x0000001C #define LINK_STAT_PLAYER_COUNT_SHIFT 2 @@ -18,7 +21,23 @@ #define LINK_STAT_CONN_ESTABLISHED_SHIFT 6 #define LINK_STAT_RECEIVED_NOTHING 0x00000100 #define LINK_STAT_RECEIVED_NOTHING_SHIFT 8 +#define LINK_STAT_UNK_FLAG_9 0x00000200 +#define LINK_STAT_UNK_FLAG_9_SHIFT 9 #define LINK_STAT_ERRORS 0x0007F000 +#define LINK_STAT_ERRORS_SHIFT 12 + +#define LINK_STAT_ERROR_HARDWARE 0x00001000 +#define LINK_STAT_ERROR_HARDWARE_SHIFT 12 +#define LINK_STAT_ERROR_CHECKSUM 0x00002000 +#define LINK_STAT_ERROR_CHECKSUM_SHIFT 13 +#define LINK_STAT_ERROR_QUEUE_FULL 0x00004000 +#define LINK_STAT_ERROR_QUEUE_FULL_SHIFT 14 +#define LINK_STAT_ERROR_LAG_MASTER 0x00010000 +#define LINK_STAT_ERROR_LAG_MASTER_SHIFT 16 +#define LINK_STAT_ERROR_INVALID_ID 0x00020000 +#define LINK_STAT_ERROR_INVALID_ID_SHIFT 17 +#define LINK_STAT_ERROR_LAG_SLAVE 0x00040000 +#define LINK_STAT_ERROR_LAG_SLAVE_SHIFT 18 #define EXTRACT_PLAYER_COUNT(status) \ (((status) & LINK_STAT_PLAYER_COUNT) >> LINK_STAT_PLAYER_COUNT_SHIFT) @@ -28,6 +47,23 @@ (((status) >> LINK_STAT_CONN_ESTABLISHED_SHIFT) & 1) #define EXTRACT_RECEIVED_NOTHING(status) \ (((status) >> LINK_STAT_RECEIVED_NOTHING_SHIFT) & 1) +#define EXTRACT_LINK_ERRORS(status) \ +(((status) & LINK_STAT_ERRORS) >> LINK_STAT_ERRORS_SHIFT) + +#define LINKCMD_SEND_LINK_TYPE 0x2222 +#define LINKCMD_0x2FFE 0x2FFE +#define LINKCMD_SEND_HELD_KEYS 0x4444 +#define LINKCMD_0x5555 0x5555 +#define LINKCMD_0x5566 0x5566 +#define LINKCMD_0x5FFF 0x5FFF +#define LINKCMD_0x6666 0x6666 +#define LINKCMD_0x7777 0x7777 +#define LINKCMD_CONT_BLOCK 0x8888 +#define LINKCMD_0xAAAA 0xAAAA +#define LINKCMD_0xAAAB 0xAAAB +#define LINKCMD_INIT_BLOCK 0xBBBB +#define LINKCMD_SEND_HELD_KEYS_2 0xCAFE +#define LINKCMD_0xCCCC 0xCCCC #define MASTER_HANDSHAKE 0x8FFF #define SLAVE_HANDSHAKE 0xB9A0 @@ -47,6 +83,10 @@ enum EXCHANGE_COMPLETE, EXCHANGE_TIMED_OUT, EXCHANGE_IN_PROGRESS, + EXCHANGE_STAT_4, + EXCHANGE_STAT_5, + EXCHANGE_STAT_6, + EXCHANGE_STAT_7 }; enum @@ -138,7 +178,7 @@ extern u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; extern u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE]; extern u16 gLinkType; extern u32 gLinkStatus; -extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2]; +extern u16 gBlockRecvBuffer[MAX_RFU_PLAYERS][BLOCK_BUFFER_SIZE / 2]; extern u16 gSendCmd[CMD_LENGTH]; extern u8 gShouldAdvanceLinkState; extern struct LinkPlayer gLinkPlayers[]; @@ -147,20 +187,19 @@ extern bool8 gReceivedRemoteLinkPlayers; extern bool8 gLinkVSyncDisabled; extern u8 gWirelessCommType; -extern u8 gUnknown_3003F84; -extern u64 gSioMlt_Recv; +extern u8 gShouldAdvanceLinkState; void Task_DestroySelf(u8); void OpenLink(void); void CloseLink(void); -u16 LinkMain2(u16 *); +u16 LinkMain2(const u16 *); void sub_8007B14(void); bool32 sub_8007B24(void); void ClearLinkCallback(void); void ClearLinkCallback_2(void); u8 GetLinkPlayerCount(void); void OpenLinkTimed(void); -u8 GetLinkPlayerDataExchangeStatusTimed(void); +u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int higher); bool8 IsLinkPlayerDataExchangeComplete(void); u32 GetLinkPlayerTrainerId(u8); void ResetLinkPlayers(void); @@ -181,7 +220,7 @@ bool8 IsLinkConnectionEstablished(void); void SetSuppressLinkErrorMessage(bool8); bool8 HasLinkErrorOccurred(void); void ResetSerial(void); -u32 LinkMain1(u8 *, u16 *, u16[CMD_LENGTH][MAX_LINK_PLAYERS]); +u32 LinkMain1(u8 *, u16 *, u16[MAX_RFU_PLAYERS][CMD_LENGTH]); void RFUVSync(void); void Timer3Intr(void); void SerialCB(void); @@ -203,17 +242,19 @@ void sub_800AAC0(void); void OpenLink(void); bool8 IsLinkMaster(void); void CheckShouldAdvanceLinkState(void); -void sub_800AA80(u8); +void sub_800AA80(u16 a0); void sub_80098D8(void); void CloseLink(void); bool8 IsLinkTaskFinished(void); bool32 sub_800B270(void); -void sub_800B388(void); +void ResetSerial(void); void sub_8054A28(void); void sub_800B1F4(void); void LoadWirelessStatusIndicatorSpriteGfx(void); void CreateWirelessStatusIndicatorSprite(u8, u8); void sub_8009FE8(void); -void sub_800A068(void); +void ClearLinkCallback_2(void); +void sub_80FA42C(void); +void sub_800B284(struct LinkPlayer * linkPlayer); #endif // GUARD_LINK_H diff --git a/include/link_rfu.h b/include/link_rfu.h index 928ae380e..2757e5296 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -11,7 +11,7 @@ bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src); void sub_80FA190(void); void MG_DrawCheckerboardPattern(void); void task_add_05_task_del_08FA224_when_no_RfuFunc(void); -bool8 IsNoOneConnected(void); +bool8 IsRfuTaskFinished(void); void DestroyWirelessStatusIndicatorSprite(void); void MEvent_CreateTask_CardOrNewsWithFriend(u8); void MEvent_CreateTask_CardOrNewsOverWireless(u8); @@ -19,5 +19,25 @@ void MEvent_CreateTask_Leader(u8); void sub_80F9E2C(void * data); u8 sub_8116DE0(void); void sub_80FBB4C(void); +void sub_80F86F4(void); +void sub_80FB128(bool32 a0); +u32 sub_80FD3A4(void); +bool32 IsSendingKeysToRfu(void); +void Rfu_set_zero(void); +u8 GetRfuPlayerCount(void); +void sub_80F9828(void); +u8 rfu_get_multiplayer_id(void); +bool8 Rfu_InitBlockSend(const void * src, u16 size); +bool8 sub_80FA0F8(u8 a0); +u8 Rfu_GetBlockReceivedStatus(void); +void Rfu_SetBlockReceivedFlag(u8 who); +void Rfu_ResetBlockReceivedFlag(u8 who); +bool8 Rfu_IsMaster(void); +void sub_80F85F8(void); +bool32 sub_80FAE94(void); +bool32 sub_80FAEF0(void); +bool32 IsRfuRecvQueueEmpty(void); +u32 GetRfuRecvQueueLength(void); +void sub_80F8DC0(void); #endif //GUARD_LINK_RFU_H diff --git a/include/main.h b/include/main.h index 589709436..c962cf7bd 100644 --- a/include/main.h +++ b/include/main.h @@ -72,4 +72,6 @@ u16 GetGeneratedTrainerIdLower(void); extern const char RomHeaderGameCode[4]; extern const char RomHeaderSoftwareVersion; +extern u8 gLinkTransferringData; + #endif // GUARD_MAIN_H diff --git a/include/overworld.h b/include/overworld.h index f2ef24e9e..77cacff94 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -142,4 +142,6 @@ void ResetGameStats(void); void Overworld_CreditsMainCB(void); bool32 Overworld_DoScrollSceneForCredits(u8 *, const struct CreditsOverworldCmd *, u8); +bool32 sub_8058318(void); + #endif //GUARD_OVERWORLD_H diff --git a/include/strings.h b/include/strings.h index 9ddce6044..1bafbacbe 100644 --- a/include/strings.h +++ b/include/strings.h @@ -329,4 +329,11 @@ extern const u8 gText_ItemfinderResponding[]; extern const u8 gText_ItemfinderShakingWildly[]; extern const u8 gText_NopeTheresNoResponse[]; +// link +extern const u8 gText_CommErrorEllipsis[]; +extern const u8 gText_MoveCloserToLinkPartner[]; +extern const u8 gText_CommErrorCheckConnections[]; +extern const u8 gText_ABtnTitleScreen[]; +extern const u8 gText_ABtnRegistrationCounter[]; + #endif //GUARD_STRINGS_H diff --git a/include/trade.h b/include/trade.h new file mode 100644 index 000000000..02ed7d8c4 --- /dev/null +++ b/include/trade.h @@ -0,0 +1,6 @@ +#ifndef GUARD_TRADE_H +#define GUARD_TRADE_H + +s32 sub_804FB34(void); + +#endif //GUARD_TRADE_H |