Adding missing methods in C bindings to update configuration in realtime

This commit is contained in:
Rodrigo Alfonso 2024-11-29 05:44:09 +00:00
parent 8121b7aa85
commit 2628c2130e
6 changed files with 80 additions and 0 deletions

View File

@ -77,6 +77,25 @@ void C_LinkCable_resetTimer(C_LinkCableHandle handle) {
static_cast<LinkCable*>(handle)->resetTimer();
}
C_LinkCable_Config C_LinkCable_getConfig(C_LinkCableHandle handle) {
C_LinkCable_Config config;
config.baudRate = static_cast<C_LinkCable_BaudRate>(
static_cast<LinkCable*>(handle)->config.baudRate);
config.timeout = static_cast<LinkCable*>(handle)->config.timeout;
config.interval = static_cast<LinkCable*>(handle)->config.interval;
config.sendTimerId = static_cast<LinkCable*>(handle)->config.sendTimerId;
return config;
}
void C_LinkCable_setConfig(C_LinkCableHandle handle,
C_LinkCable_Config config) {
static_cast<LinkCable*>(handle)->config.baudRate =
static_cast<LinkCable::BaudRate>(config.baudRate);
static_cast<LinkCable*>(handle)->config.timeout = config.timeout;
static_cast<LinkCable*>(handle)->config.interval = config.interval;
static_cast<LinkCable*>(handle)->config.sendTimerId = config.sendTimerId;
}
void C_LinkCable_onVBlank(C_LinkCableHandle handle) {
static_cast<LinkCable*>(handle)->_onVBlank();
}

View File

@ -23,6 +23,13 @@ typedef enum {
C_LINK_CABLE_BAUD_RATE_3 // 115200 bps
} C_LinkCable_BaudRate;
typedef struct {
C_LinkCable_BaudRate baudRate;
u32 timeout; // can be changed in realtime
u16 interval; // can be changed in realtime, but call `resetTimer()`
u8 sendTimerId; // can be changed in realtime, but call `resetTimer()`
} C_LinkCable_Config;
C_LinkCableHandle C_LinkCable_createDefault();
C_LinkCableHandle C_LinkCable_create(C_LinkCable_BaudRate baudRate,
u32 timeout,
@ -52,6 +59,9 @@ void C_LinkCable_send(C_LinkCableHandle handle, u16 data);
void C_LinkCable_resetTimer(C_LinkCableHandle handle);
C_LinkCable_Config C_LinkCable_getConfig(C_LinkCableHandle handle);
void C_LinkCable_setConfig(C_LinkCableHandle handle, C_LinkCable_Config config);
void C_LinkCable_onVBlank(C_LinkCableHandle handle);
void C_LinkCable_onSerial(C_LinkCableHandle handle);
void C_LinkCable_onTimer(C_LinkCableHandle handle);

View File

@ -118,6 +118,15 @@ u32 C_LinkUniversal_getSubWaitCount(C_LinkUniversalHandle handle) {
return static_cast<LinkUniversal*>(handle)->_getSubWaitCount();
}
C_LinkCableHandle C_LinkUniversal_getLinkCable(C_LinkUniversalHandle handle) {
return static_cast<LinkUniversal*>(handle)->linkCable;
}
C_LinkWirelessHandle C_LinkUniversal_getLinkWireless(
C_LinkUniversalHandle handle) {
return static_cast<LinkUniversal*>(handle)->linkWireless;
}
void C_LinkUniversal_onVBlank(C_LinkUniversalHandle handle) {
static_cast<LinkUniversal*>(handle)->_onVBlank();
}

View File

@ -6,6 +6,8 @@ extern "C" {
#endif
#include <tonc_core.h>
#include "C_LinkCable.h"
#include "C_LinkWireless.h"
typedef void* C_LinkUniversalHandle;
@ -88,6 +90,10 @@ void C_LinkUniversal_resetTimer(C_LinkUniversalHandle handle);
u32 C_LinkUniversal_getWaitCount(C_LinkUniversalHandle handle);
u32 C_LinkUniversal_getSubWaitCount(C_LinkUniversalHandle handle);
C_LinkCableHandle C_LinkUniversal_getLinkCable(C_LinkUniversalHandle handle);
C_LinkWirelessHandle C_LinkUniversal_getLinkWireless(
C_LinkUniversalHandle handle);
void C_LinkUniversal_onVBlank(C_LinkUniversalHandle handle);
void C_LinkUniversal_onSerial(C_LinkUniversalHandle handle);
void C_LinkUniversal_onTimer(C_LinkUniversalHandle handle);

View File

@ -142,6 +142,29 @@ void C_LinkWireless_resetTimer(C_LinkWirelessHandle handle) {
return static_cast<LinkWireless*>(handle)->resetTimer();
}
C_LinkWireless_Config C_LinkWireless_getConfig(C_LinkWirelessHandle handle) {
C_LinkWireless_Config config;
config.forwarding = static_cast<LinkWireless*>(handle)->config.forwarding;
config.retransmission =
static_cast<LinkWireless*>(handle)->config.retransmission;
config.maxPlayers = static_cast<LinkWireless*>(handle)->config.maxPlayers;
config.timeout = static_cast<LinkWireless*>(handle)->config.timeout;
config.interval = static_cast<LinkWireless*>(handle)->config.interval;
config.sendTimerId = static_cast<LinkWireless*>(handle)->config.sendTimerId;
return config;
}
void C_LinkWireless_setConfig(C_LinkWirelessHandle handle,
C_LinkWireless_Config config) {
static_cast<LinkWireless*>(handle)->config.forwarding = config.forwarding;
static_cast<LinkWireless*>(handle)->config.retransmission =
config.retransmission;
static_cast<LinkWireless*>(handle)->config.maxPlayers = config.maxPlayers;
static_cast<LinkWireless*>(handle)->config.timeout = config.timeout;
static_cast<LinkWireless*>(handle)->config.interval = config.interval;
static_cast<LinkWireless*>(handle)->config.sendTimerId = config.sendTimerId;
}
bool C_LinkWireless_hasActiveAsyncCommand(C_LinkWirelessHandle handle) {
return static_cast<LinkWireless*>(handle)->_hasActiveAsyncCommand();
}

View File

@ -67,6 +67,15 @@ typedef struct {
u8 currentPlayerCount;
} C_LinkWireless_Server;
typedef struct {
bool forwarding;
bool retransmission;
u8 maxPlayers;
u32 timeout; // can be changed in realtime
u16 interval; // can be changed in realtime, but call `resetTimer()`
u8 sendTimerId; // can be changed in realtime, but call `resetTimer()`
} C_LinkWireless_Config;
C_LinkWirelessHandle C_LinkWireless_createDefault();
C_LinkWirelessHandle C_LinkWireless_create(bool forwarding,
bool retransmission,
@ -109,6 +118,10 @@ C_LinkWireless_Error C_LinkWireless_getLastError(C_LinkWirelessHandle handle,
void C_LinkWireless_resetTimer(C_LinkWirelessHandle handle);
C_LinkWireless_Config C_LinkWireless_getConfig(C_LinkWirelessHandle handle);
void C_LinkWireless_setConfig(C_LinkWirelessHandle handle,
C_LinkWireless_Config config);
bool C_LinkWireless_hasActiveAsyncCommand(C_LinkWirelessHandle handle);
bool C_LinkWireless_canSend(C_LinkWirelessHandle handle);