Skip to content

v7.0.0

Compare
Choose a tag to compare
@afska afska released this 27 Aug 10:00
· 16 commits to master since this release
31136a8
  • 💥 Breaking changes:

    • Since libtonc is no longer a dependency, lib/_link_common.hpp needs to be included
    • In LinkCable and LinkWireless, the remoteTimeout parameter has been removed. Now, there's a single timeout, measured in frames. This change simplifies things by making timeouts independent of the interval value
    • In LinkWireless, the asyncACKTimerId 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, pass LinkSPI::PacketSize::SIZE_8BIT as last constructor argument
  • 🟪 Added LinkCube:

    • JOYBUS mode
  • 📱 Added LinkMobile:

  • 👾 LinkCable:

    • The remoteTimeout constructor parameter has been removed. The functionality remains the same, but now both IRQ-timeouts and message timeouts use the timeout 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
  • 💻 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 the timeout 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 to deactivate()
    • 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 return false and getLastError() will be BUSY_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
  • 📡 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
  • 🔗 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
  • 🖱️ 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