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