mirror of
https://github.com/afska/gba-link-connection.git
synced 2026-10-02 05:47:11 -05:00
Configurable magic in setup(...), start LinkWirelessMultiboot cleanup
This commit is contained in:
@@ -188,7 +188,7 @@ void MultibootScene::processButtons() {
|
||||
const u8* romToSend =
|
||||
(const u8*)gbfs_get_obj(fs, ROM_FILE_NAME, &fileLength);
|
||||
|
||||
linkWirelessMultiboot->sendRom(romToSend, fileLength,
|
||||
linkWirelessMultiboot->sendRom(romToSend, fileLength, "Multi", "Test", 2,
|
||||
[]() { return false; });
|
||||
print();
|
||||
}
|
||||
|
||||
@@ -151,11 +151,12 @@ class LinkRawWireless {
|
||||
return success;
|
||||
}
|
||||
|
||||
bool setup(u8 maxPlayers = LINK_RAW_WIRELESS_MAX_PLAYERS) {
|
||||
bool setup(u8 maxPlayers = LINK_RAW_WIRELESS_MAX_PLAYERS,
|
||||
u32 magic = LINK_RAW_WIRELESS_SETUP_MAGIC) {
|
||||
return sendCommand(
|
||||
LINK_RAW_WIRELESS_COMMAND_SETUP,
|
||||
std::vector<u32>{
|
||||
(u32)(LINK_RAW_WIRELESS_SETUP_MAGIC |
|
||||
(u32)(magic |
|
||||
(((LINK_RAW_WIRELESS_MAX_PLAYERS - maxPlayers) & 0b11)
|
||||
<< LINK_RAW_WIRELESS_SETUP_MAX_PLAYERS_BIT))})
|
||||
.success;
|
||||
|
||||
@@ -35,7 +35,10 @@
|
||||
|
||||
#define LINK_WIRELESS_MULTIBOOT_MIN_ROM_SIZE (0x100 + 0xc0)
|
||||
#define LINK_WIRELESS_MULTIBOOT_MAX_ROM_SIZE (256 * 1024)
|
||||
#define LINK_WIRELESS_MULTIBOOT_MIN_PLAYERS 2
|
||||
#define LINK_WIRELESS_MULTIBOOT_MAX_PLAYERS 5
|
||||
#define LINK_WIRELESS_MULTIBOOT_HEADER_SIZE 0xC0
|
||||
#define LINK_WIRELESS_MULTIBOOT_SETUP_MAGIC 0x003F0120
|
||||
|
||||
static volatile char LINK_WIRELESS_MULTIBOOT_VERSION[] =
|
||||
"LinkWirelessMultiboot/v6.2.0";
|
||||
@@ -45,7 +48,14 @@ class LinkWirelessMultiboot {
|
||||
|
||||
public:
|
||||
Logger logger = [](std::string str) {};
|
||||
enum Result { SUCCESS, INVALID_SIZE, CANCELED, FAILURE };
|
||||
enum Result {
|
||||
SUCCESS,
|
||||
INVALID_SIZE,
|
||||
INVALID_PLAYERS,
|
||||
CANCELED,
|
||||
ADAPTER_NOT_DETECTED,
|
||||
FAILURE
|
||||
};
|
||||
|
||||
struct ServerSDKHeader {
|
||||
unsigned int payloadSize : 7;
|
||||
@@ -74,32 +84,33 @@ class LinkWirelessMultiboot {
|
||||
};
|
||||
|
||||
template <typename F>
|
||||
Result sendRom(const u8* rom, u32 romSize, F cancel) {
|
||||
Result sendRom(const u8* rom,
|
||||
u32 romSize,
|
||||
const char* gameName,
|
||||
const char* userName,
|
||||
u8 players,
|
||||
F cancel) {
|
||||
if (romSize < LINK_WIRELESS_MULTIBOOT_MIN_ROM_SIZE)
|
||||
return INVALID_SIZE;
|
||||
if (romSize > LINK_WIRELESS_MULTIBOOT_MAX_ROM_SIZE)
|
||||
return INVALID_SIZE;
|
||||
// TODO: Document no 0x10 boundary limit
|
||||
return INVALID_SIZE; // TODO: Document no 0x10 boundary limit
|
||||
if (players < LINK_WIRELESS_MULTIBOOT_MIN_PLAYERS ||
|
||||
players > LINK_WIRELESS_MULTIBOOT_MAX_PLAYERS)
|
||||
return INVALID_PLAYERS;
|
||||
|
||||
// std::vector<u8> bytes = {};
|
||||
|
||||
bool success = true;
|
||||
success = link->activate();
|
||||
if (!success) {
|
||||
LWMLOG("cannot activate");
|
||||
return FAILURE;
|
||||
if (!link->activate()) {
|
||||
LWMLOG("! adapter not detected");
|
||||
return ADAPTER_NOT_DETECTED;
|
||||
}
|
||||
LWMLOG("activated");
|
||||
|
||||
success = link->sendCommand(LINK_RAW_WIRELESS_COMMAND_SETUP,
|
||||
std::vector<u32>{0x003F0120})
|
||||
.success; // TODO: IMPLEMENT SETUP
|
||||
if (!success) {
|
||||
LWMLOG("setup failed");
|
||||
if (!link->setup(players, LINK_WIRELESS_MULTIBOOT_SETUP_MAGIC)) {
|
||||
LWMLOG("! setup failed");
|
||||
return FAILURE;
|
||||
}
|
||||
LWMLOG("setup ok");
|
||||
|
||||
bool success; // TODO: REMOVE
|
||||
success = link->broadcast("Multi", "Test", 0b1111111111111111);
|
||||
if (!success) {
|
||||
LWMLOG("broadcast failed");
|
||||
@@ -344,6 +355,8 @@ class LinkWirelessMultiboot {
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
~LinkWirelessMultiboot() { delete link; }
|
||||
|
||||
LinkRawWireless* link = new LinkRawWireless();
|
||||
|
||||
ClientSDKHeader lastACK;
|
||||
|
||||
Reference in New Issue
Block a user