Skip to content

Releases: afska/gba-link-connection

v7.0.1

14 Sep 08:57
Compare
Choose a tag to compare
  • 📻 LinkWireless:
    • Fixed a data race check when copying incoming messages (affects v7.0.0 only)
    • Fixed full buffer check in send(...)
    • Fixed potential issues when using LINK_WIRELESS_ENABLE_NESTED_IRQ with low timer intervals

v7.0.0

27 Aug 10:00
31136a8
Compare
Choose a tag to compare
  • 💥 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

v6.3.0

22 Apr 00:55
bc94951
Compare
Choose a tag to compare
  • ⏱️ Added LinkUART:
    • UART mode
  • 🖱️ Added LinkPS2Mouse:
    • PS/2 mouse accessory
  • ⌨️ Added LinkPS2Keyboard:
    • PS/2 keyboard accessory

v6.2.3

01 Mar 20:46
Compare
Choose a tag to compare
  • 🌎 LinkUniversal:
    • LINK_UNIVERSAL_MAX_PLAYERS now defaults to 5

v6.2.2

24 Feb 05:24
Compare
Choose a tag to compare
  • 🌎 LinkUniversal:
    • send(...) now returns a boolean, honoring LinkWireless' response

v6.2.1

07 Feb 04:20
Compare
Choose a tag to compare
  • 🔗 LinkSPI:
    • Removed inline asm code, as it wasn't needed and it was causing compilation issues

v6.2.0

05 Feb 06:33
ccb61e4
Compare
Choose a tag to compare
  • 📡 Added LinkWirelessMultiboot:
    • Multiboot using the GBA Wireless Adapter
  • 🔧🏛️ Added LinkWirelessOpenSDK:
    • Abstraction of the official wireless protocol
  • 💻 LinkCableMultiboot:
    • Refactored so it uses LinkRawCable internally
  • 🔧📻 LinkRawWireless:
    • Fixed ACKs during clock inversion, ensuring reliability no matter the wait state settings or compiler optimization level
    • Added maxTransmissions and waitTimeout settings to setup(...)
    • 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)
  • 🔗 LinkSPI:
    • Optimized transfer(...) method
    • Added a compile-time option to use 8-bit packets instead of 32-bit (LINK_SPI_8BIT_MODE)
  • ⚙️ General:
    • All examples have now been tested and compiled using the latest devkitPro
    • All examples now have a version number

v6.1.1

15 Jan 22:47
Compare
Choose a tag to compare
  • 📻 LinkWireless:
    • Switched to C-style strings to avoid unnecessary memory allocations
    • The adapter is now reset before sending the 0x3d (Bye) command to ensure the adapter always ends in low power consumption mode

v6.1.0

15 Jan 13:25
7b1d457
Compare
Choose a tag to compare
  • 🔧👾 Added LinkRawCable:
    • Minimal, low level cable
  • 🔧📻 Added LinkRawWireless
    • Minimal, low level wireless
  • ⚙️ General:
    • Fixed A+B+START+SELECT combo in _full examples

v6.0.3

06 Jan 10:51
cadda9e
Compare
Choose a tag to compare
  • 📻 LinkWireless:
    • Added to the Server struct (returned by getServers(...)):
      • currentPlayerCount: number of active players in the room (or 0 if it's full)
      • isFull(): a boolean indicating whether the room is full or not (if true, the connection will fail)
    • When using maxPlayers, the library will now use the Wireless Adapter's native system to set the room's player limit. It no longer needs to run an EndHost command when a room is closed
    • Fixed incorrect usage documentation on receive(...) and LinkWireless_demo example
    • Added 'test lag' functionality to the LinkWireless_demo example
  • 🌎 LinkUniversal:
    • Fixed a bug when receiving wireless messages that could lead to crashes when transferring large data chunks
    • Fixed default value for maxPlayers (5 -> 4) when setting up LinkWireless
    • Removed code to update broadcast data to close the room since it's no longer needed
    • Added player limit option to the LinkUniversal_basic example