Sorting LinkRawWireless methods

This commit is contained in:
Rodrigo Alfonso 2025-01-12 23:43:37 -03:00
parent f166dcb07d
commit 0516d71472
4 changed files with 77 additions and 77 deletions

View File

@ -293,17 +293,17 @@ https://github.com/afska/gba-link-connection/assets/1631752/9a648bff-b14f-4a85-9
- There's one method for every supported Wireless Adapter command:
- `setup` = `0x17`
- `getSystemStatus` = `0x13`
- `broadcast` = `0x16`
- `startHost` = `0x19`
- `systemStatus` = `0x13`
- `slotStatus` = `0x14`
- `getSlotStatus` = `0x14`
- `acceptConnections` = `0x1a`
- `endHost` = `0x1b`
- `broadcastReadStart` = `0x1c`
- `broadcastReadPoll` = `0x1d`
- `broadcastReadEnd` = `0x1e`
- `connect` = `0x1f`
- `isFinishedConnect` = `0x20`
- `keepConnecting` = `0x20`
- `finishConnection` = `0x21`
- `sendData` = `0x24`
- `sendDataAndWait` = `0x25`

View File

@ -7,17 +7,17 @@
// Usage:
// - There's one method for every supported Wireless Adapter command:
// - `setup` = `0x17`
// - `getSystemStatus` = `0x13`
// - `broadcast` = `0x16`
// - `startHost` = `0x19`
// - `systemStatus` = `0x13`
// - `slotStatus` = `0x14`
// - `getSlotStatus` = `0x14`
// - `acceptConnections` = `0x1a`
// - `endHost` = `0x1b`
// - `broadcastReadStart` = `0x1c`
// - `broadcastReadPoll` = `0x1d`
// - `broadcastReadEnd` = `0x1e`
// - `connect` = `0x1f`
// - `isFinishedConnect` = `0x20`
// - `keepConnecting` = `0x20`
// - `finishConnection` = `0x21`
// - `sendData` = `0x24`
// - `sendDataAndWait` = `0x25`
@ -297,6 +297,62 @@ class LinkRawWireless {
return sendCommand(COMMAND_SETUP, params, 1).success;
}
/**
* @brief Calls the SystemStatus (`0x13`) command.
* @param response A structure that will be filled with the response data.
*/
bool getSystemStatus(SystemStatusResponse& response) {
auto result = sendCommand(COMMAND_SYSTEM_STATUS);
if (!result.success || result.dataSize != 1) {
_resetState();
return false;
}
u32 status = result.data[0];
response.deviceId = Link::lsB32(status);
u8 slot = Link::lsB16(Link::msB32(status)) & 0b1111;
response.currentPlayerId = slot == 0b0001 ? 1
: slot == 0b0010 ? 2
: slot == 0b0100 ? 3
: slot == 0b1000 ? 4
: 0;
u8 adapterState = Link::msB16(Link::msB32(status));
response.isServerClosed = false;
switch (adapterState) {
case 1: {
response.adapterState = State::SERVING;
response.isServerClosed = true;
break;
}
case 2: {
response.adapterState = State::SERVING;
break;
}
case 3: {
response.adapterState = State::SEARCHING;
break;
}
case 4: {
response.adapterState = State::CONNECTING;
break;
}
case 5: {
response.adapterState = State::CONNECTED;
break;
}
default: {
response.adapterState = State::AUTHENTICATED;
break;
}
}
return true;
}
/**
* @brief Calls the Broadcast (`0x16`) command.
* @param gameName Game name. Maximum `14` characters + null terminator.
@ -368,62 +424,6 @@ class LinkRawWireless {
return true;
}
/**
* @brief Calls the SystemStatus (`0x13`) command.
* @param response A structure that will be filled with the response data.
*/
bool getSystemStatus(SystemStatusResponse& response) {
auto result = sendCommand(COMMAND_SYSTEM_STATUS);
if (!result.success || result.dataSize != 1) {
_resetState();
return false;
}
u32 status = result.data[0];
response.deviceId = Link::lsB32(status);
u8 slot = Link::lsB16(Link::msB32(status)) & 0b1111;
response.currentPlayerId = slot == 0b0001 ? 1
: slot == 0b0010 ? 2
: slot == 0b0100 ? 3
: slot == 0b1000 ? 4
: 0;
u8 adapterState = Link::msB16(Link::msB32(status));
response.isServerClosed = false;
switch (adapterState) {
case 1: {
response.adapterState = State::SERVING;
response.isServerClosed = true;
break;
}
case 2: {
response.adapterState = State::SERVING;
break;
}
case 3: {
response.adapterState = State::SEARCHING;
break;
}
case 4: {
response.adapterState = State::CONNECTING;
break;
}
case 5: {
response.adapterState = State::CONNECTED;
break;
}
default: {
response.adapterState = State::AUTHENTICATED;
break;
}
}
return true;
}
/**
* @brief Calls the SlotStatus (`0x14`) command.
* @param response A structure that will be filled with the response data.

View File

@ -43,18 +43,6 @@ bool C_LinkRawWireless_setup(C_LinkRawWirelessHandle handle,
maxPlayers, maxTransmissions, waitTimeout, magic);
}
bool C_LinkRawWireless_broadcast(C_LinkRawWirelessHandle handle,
const char* gameName,
const char* userName,
u16 gameId) {
return static_cast<LinkRawWireless*>(handle)->broadcast(gameName, userName,
gameId);
}
bool C_LinkRawWireless_startHost(C_LinkRawWirelessHandle handle) {
return static_cast<LinkRawWireless*>(handle)->startHost();
}
bool C_LinkRawWireless_getSystemStatus(
C_LinkRawWirelessHandle handle,
C_LinkRawWireless_SystemStatusResponse* response) {
@ -70,6 +58,18 @@ bool C_LinkRawWireless_getSystemStatus(
return success;
}
bool C_LinkRawWireless_broadcast(C_LinkRawWirelessHandle handle,
const char* gameName,
const char* userName,
u16 gameId) {
return static_cast<LinkRawWireless*>(handle)->broadcast(gameName, userName,
gameId);
}
bool C_LinkRawWireless_startHost(C_LinkRawWirelessHandle handle) {
return static_cast<LinkRawWireless*>(handle)->startHost();
}
bool C_LinkRawWireless_getSlotStatus(
C_LinkRawWirelessHandle handle,
C_LinkRawWireless_SlotStatusResponse* response) {

View File

@ -111,14 +111,14 @@ bool C_LinkRawWireless_setup(C_LinkRawWirelessHandle handle,
u8 maxTransmissions,
u8 waitTimeout,
u32 magic);
bool C_LinkRawWireless_getSystemStatus(
C_LinkRawWirelessHandle handle,
C_LinkRawWireless_SystemStatusResponse* response);
bool C_LinkRawWireless_broadcast(C_LinkRawWirelessHandle handle,
const char* gameName,
const char* userName,
u16 gameId);
bool C_LinkRawWireless_startHost(C_LinkRawWirelessHandle handle);
bool C_LinkRawWireless_getSystemStatus(
C_LinkRawWirelessHandle handle,
C_LinkRawWireless_SystemStatusResponse* response);
bool C_LinkRawWireless_getSlotStatus(
C_LinkRawWirelessHandle handle,
C_LinkRawWireless_SlotStatusResponse* response);