Releases: afska/gba-link-connection
Releases · afska/gba-link-connection
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
v6.1.1
v6.1.0
v6.0.3
- 📻 LinkWireless:
- Added to the
Server
struct (returned bygetServers(...)
):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 anEndHost
command when a room is closed - Fixed incorrect usage documentation on
receive(...)
andLinkWireless_demo
example - Added 'test lag' functionality to the
LinkWireless_demo
example
- Added to the
- 🌎 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 upLinkWireless
- 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