Releases: afska/gba-link-connection
Releases · afska/gba-link-connection
v7.0.3
v7.0.2
- 📻 LinkWireless:
- Fixed user name length validation in
serve(...)
- Ensuring a clean
RCNT
state on activation to prevent incompatibilities withLinkGPIO
or other libraries
- Fixed user name length validation in
- 📡 LinkWirelessMultiboot:
- Fixed compile script in example to properly show logs
- 🔧📻 LinkRawWireless:
- Fixed user name length validation in
broadcast(...)
- Fixed user name length validation in
- 🔧🏛 LinkWirelessOpenSDK:
- Fixed uninitialized and unaligned reads bug
- 🌎 LinkUniversal:
- Fixed random seed initialization
v7.0.1
v7.0.0
- 💥 Breaking changes:
- ⚙️ Since libtonc is no longer a dependency, lib/_link_common.hpp needs to be included
- 👾📻 In
LinkCable
andLinkWireless
, theremoteTimeout
parameter has been removed. Now, there's a singletimeout
, measured in frames. This change simplifies things by making timeouts independent of theinterval
value - 📻 In
LinkWireless
, theasyncACKTimerId
parameter has been removed. With the latest changes, it's no longer needed and actually burns more cycles - 🔗
LINK_SPI_8BIT_MODE
was moved to a runtime argument to allow using two different data sizes in the same project. Now, to use 8-bit SPI, passLinkSPI::PacketSize::SIZE_8BIT
as last constructor argument
- 🟪 Added LinkCube:
- JOYBUS mode
- 📱 Added LinkMobile:
- Mobile Adapter GB (thanks @REONTeam)
- 👾 LinkCable:
- 💥 The
remoteTimeout
constructor parameter has been removed. The functionality remains the same, but now both IRQ-timeouts and message timeouts use thetimeout
parameter, measured in frames - Send buffer is cleared after every SERIAL interrupt, preventing duplicate packets
- Timeout checking was moved to the VBlank handler to avoid extra checks for every timer tick
- 💥 The
- 💻 LinkCableMultiboot:
- Made some changes to improve stability/reliability of transfers
- Added an SPI mode, to transfer ROMs using a GBC Link Cable
- Added a compile-time constant to change the logo's palette data
- The example can now send multiple ROMs and launch them. It's now bundled with every other gba-link-connection example
- 📻 LinkWireless:
- 💥 The
remoteTimeout
constructor parameter has been removed. The functionality remains the same, but now both IRQ-timeouts and message timeouts use thetimeout
parameter, measured in frames - 💥 The
asyncACKTimerId
parameter has been removed. With the latest changes, it's no longer needed and actually burns more cycles - Communications with the adapter now use timeouts 10 times smaller, so when disconnected, the synchronous methods are faster
- Added optional
turnOff
parameter todeactivate()
- If initialization fails, the timers and SPI serial mode are now stopped
- When already serving, calling
serve(...)
to update broadcast data will no longer cause disconnections if the adapter is busy. In such case, the method will returnfalse
andgetLastError()
will beBUSY_TRY_AGAIN
- Added compile-time constant to enable nested interrupts so time-critical VBlank handlers (e.g. an audio player) can run on time
- Added compile-time constant to optimize the library for two-player games and allow sending small unchecked packets as fast as possible
- Fixed bad memory access when a hacked client spoofs its player ID
- The example now shows the compile-time settings
- The example can now test quick send/receive (2-player only)
- The profiler example can now change the broadcast data with the UP key
- 💥 The
- 📡 LinkWirelessMultiboot:
- Improved disconnection and acknowledgment handling
- Added cancel option to example
- The example can now send multiple ROMs and launch them. It's now bundled with every other gba-link-connection example
- 🔧📻 LinkRawWireless:
- Added wait to prevent timing issues with clock inversion. This improves wireless multiboot!
- 🌎 LinkUniversal:
- Improved performance when the Wireless Adapter is not connected and the protocol is
AUTODETECT
- Now, the Wireless Adapter is put in low consumption mode only on
deactivate()
and not after every switch - Added a constructor parameter to initialize the random seed
- Added sanity checks to ensure that setting
LINK_UNIVERSAL_MAX_PLAYERS
to less than 4 won't produce undefined behavior - Added a more real stress test using butano, with an audio player, a video, text and sprites
- Improved performance when the Wireless Adapter is not connected and the protocol is
- 🔗 LinkSPI:
- 💥 Moved data size from a compile-time constant (
LINK_SPI_8BIT_MODE
) to a constructor parameter (dataSize
) - Added 8-bit toggle to the example
- 💥 Moved data size from a compile-time constant (
- 🖱️ LinkPS2Mouse:
- Added cancel option to example
- ⌨️ LinkPS2Keyboard:
- Implemented parity check
- Added Scan Code key and event enums
- Switched to C-style function pointers to avoid extra dependencies
- Added clear option to example
- ⚙️ General:
- 💥 The libraries no longer depend on libtonc. All the required code was included here inside a namespace
- Minimized global namespace pollution. All internal API constants are private now
- Added C bindings for -almost- all libraries
- Added
Link::perFrame(...)
helper to easily calculate timer intervals - Added Doxygen-style docs for IDE quick info to all libraries
- Compile-time knobs can be defined from outside without touching any library code
- Every method that doesn't have a side effect was marked with
[[nodiscard]]
- Improved overall documentation, adding notes about memory usage and other considerations
- Multiboot ROMs are now included as part of the release
- Updated examples to libugba v0.3.0
- Refactored example code
- All examples have now been tested and compiled using gcc 14
v6.3.0
v6.2.3
v6.2.2
v6.2.1
v6.2.0
- 📡 Added LinkWirelessMultiboot:
- Multiboot using the GBA Wireless Adapter
- 🔧🏛️ Added LinkWirelessOpenSDK:
- Abstraction of the official wireless protocol
- 💻 LinkCableMultiboot:
- Refactored so it uses
LinkRawCable
internally
- Refactored so it uses
- 🔧📻 LinkRawWireless:
- Fixed ACKs during clock inversion, ensuring reliability no matter the wait state settings or compiler optimization level
- Added
maxTransmissions
andwaitTimeout
settings tosetup(...)
- Switched to C-style strings and
std::array
to avoid unnecessary memory allocations - Logging code is now removed when
LINK_RAW_WIRELESS_ENABLE_LOGGING
is not defined
- 🌎 LinkUniversal:
- Added a compile-time option to filter rooms by game ID (
LINK_UNIVERSAL_GAME_ID_FILTER
)
- Added a compile-time option to filter rooms by game ID (
- 🔗 LinkSPI:
- Optimized
transfer(...)
method - Added a compile-time option to use 8-bit packets instead of 32-bit (
LINK_SPI_8BIT_MODE
)
- Optimized
- ⚙️ General:
- All examples have now been tested and compiled using the latest devkitPro
- All examples now have a version number