mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
127 lines
3.5 KiB
C
127 lines
3.5 KiB
C
#ifndef GBA2_H
|
|
#define GBA2_H
|
|
|
|
#include "types.h"
|
|
#include "GBA/gba.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define EAPPLI_LOAD_PROG_MAGIC 'PSAE'
|
|
#define EAPPLI_PROGRAM_CHECK_MAGIC_GC 'GAFJ'
|
|
#define EAPPLI_PROGRAM_CHECK_MAGIC_GBA 'AAFJ'
|
|
|
|
#define GBA2_GBA_STATE_ERROR -1
|
|
#define GBA2_GBA_STATE_ALREADY_EXIST 0
|
|
#define GBA2_GBA_STATE_SUCCESS 1
|
|
#define GBA2_GBA_STATE_TRANSMITTING 9
|
|
|
|
#define GBA2_EAPPLI_TRANSMITTING -1
|
|
#define GBA2_EAPPLI_SUCCESS 0
|
|
#define GBA2_EAPPLI_FAILURE_XFER_ERROR 1
|
|
#define GBA2_EAPPLI_FAILURE_NO_GBA 2
|
|
|
|
#define GBA2_SEND_RECV_TRIES 7
|
|
#define GBA2_CONNECTED_TRIES 45
|
|
#define GBA2_DEFAULT_TRIES 120
|
|
#define GBA2_READ_TRIES 1200
|
|
|
|
enum eappli_type {
|
|
GBA2_EAPPLI_TYPE_NEEDLEWORK, /* Able Sisters' design program */
|
|
GBA2_EAPPLI_TYPE_MUSICSCORE, /* Town tune editor program */
|
|
GBA2_EAPPLI_TYPE_PTERMINAL, /* e-Card scanning program */
|
|
|
|
GBA2_EAPPLI_TYPE_NUM
|
|
};
|
|
|
|
enum send_eappli_state {
|
|
SEND_EAPPLI_STATE_WAIT_FOR_GBA, /* GC awaits load magic (PSAE) from GBA */
|
|
SEND_EAPPLI_STATE_GC_ACKNOWLEDGE_TO_GBA, /* GC sends load magic (PSAE) back to GBA to acknowledge it is there */
|
|
SEND_EAPPLI_STATE_2, /* skipped/unused state */
|
|
SEND_EAPPLI_STATE_GC_SEND_EAPPLI_SIZE_TO_GBA, /* GC sends eAppli program data size to GBA */
|
|
SEND_EAPPLI_STATE_WAIT_FOR_GBA_ACKNOWLEDGED_EAPPLI_SIZE, /* GC awaits GBA is ready for eAppli data */
|
|
SEND_EAPPLI_STATE_GC_SEND_EAPPLI_DATA_TO_GBA, /* GC sends eAppli data to GBA */
|
|
SEND_EAPPLI_STATE_GC_OPEN_JOY_SIO_CONNECTION, /* GC attempts to open connection with GBA eAppli program */
|
|
SEND_EAPPLI_STATE_JOY_SIO_CONNECTION_OPEN /* GC <-> GBA connection is open */
|
|
};
|
|
|
|
enum send_eappli_status {
|
|
SEND_EAPPLI_STATUS_SUCCESS, /* Program successfully sent & loaded */
|
|
SEND_EAPPLI_STATUS_FAILED_GBA_NOT_DETECTED, /* GBA was not detected during first stage */
|
|
SEND_EAPPLI_STATUS_FAILED_TRANSMISSION_ERROR, /* Transmission error occurred */
|
|
SEND_EAPPLI_STATUS_SENDING /* Transmission is in progress */
|
|
};
|
|
|
|
#define GBA2_MAKE_ACKNOWLEDGE_CODE(dev, state) (0xFFFE0000 | ((dev) << 8) | (state))
|
|
|
|
enum gba_gc_device {
|
|
GBA2_DEVICE_NONE,
|
|
GBA2_DEVICE_GC,
|
|
GBA2_DEVICE_GBA
|
|
};
|
|
|
|
enum gba_gc_command {
|
|
GBA2_CMD_CHECK_STATE = 1,
|
|
GBA2_CMD_WRITE = 2,
|
|
GBA2_CMD_START_RECV = 4,
|
|
GBA2_CMD_VALID_CHKSUM = 6,
|
|
GBA2_CMD_INVALID_CHKSUM = 7,
|
|
GBA2_CMD_READY_FOR_XFER = 8,
|
|
GBA2_CMD_XFER_START = 9,
|
|
GBA2_CMD_XFER_FINISHED = 10,
|
|
};
|
|
|
|
typedef struct gba2_joywork_s {
|
|
int unused0;
|
|
|
|
u32 packet_block_checksum;
|
|
u32 total_xfer_checksum;
|
|
int packets_processed;
|
|
int readwrite_ofs;
|
|
|
|
int unused14;
|
|
|
|
int cmd_attempts;
|
|
|
|
u8 unused1C;
|
|
|
|
u8 checksum_valid;
|
|
u8 checksum_invalid;
|
|
|
|
u8 unused1F;
|
|
|
|
u8 status;
|
|
u8 cmd_stage;
|
|
u8 recv_state;
|
|
u8 send_state;
|
|
|
|
u8 port_connection_states[GBA_MAX_CHAN];
|
|
|
|
u8 scan_state;
|
|
u8 gba_awaiting_ack;
|
|
|
|
int recv_wait;
|
|
} Joy_wrk_c;
|
|
|
|
extern int Port;
|
|
|
|
extern void mGcgba_Init();
|
|
extern void mGcgba_InitVar();
|
|
extern void mGcgba_EndComm();
|
|
extern int mGcgba_ConnectEnabled();
|
|
extern int mGcgba_Boot(u8* data_buf, size_t buf_size);
|
|
extern int mGcgba_IsEditor();
|
|
extern int mGcgba_IsIsland();
|
|
extern int mGcgba_Recv(u8* recv_bufp, size_t recv_buf_size);
|
|
extern int mGcgba_Read(u8* read_buf, size_t read_buf_size, u8 prog_type);
|
|
extern int mGcgba_CheckRecv(u8* recv_bufp, size_t recv_buf_size);
|
|
extern int mGcgba_Send(u8* send_bufp, size_t send_buf_size);
|
|
extern int mGcgba_send_eAppri(u8* eappli_p, size_t eappli_size);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|