WiiUse Changelog
================

De-facto official fork, located at <http://github.com/wiiuse/wiiuse>

Original project (0.12 and earlier):

- <http://sourceforge.net/projects/wiiuse/>
- Now-defunct web sites:
  - wiiuse.net:
    most recent archive from 2011
    <https://web.archive.org/web/20110107085956/http://wiiuse.net/>
  - wiiuse.sourceforge.net:
    most recent archive from 2010 (looks identical on homepage to 2011 snapshot above)
    <https://web.archive.org/web/20100216015311/http://wiiuse.sourceforge.net/>

v0.15.6 -- 18-Feb-2024
--------------------

Fixed:

- Linux - Fixed hang with kernels 6.6.x and newer
- Corrected historical record about Wiiuse origins
- Require CMake > 3.6.x to avoid deprecation warnings
- Support for Balance Board calibration


v0.15.5 -- 24-Nov-2019
--------------------

Fixed:

- Windows build - Fixed support for the -TR Wiimote (big thanks to
	Philipp Hartl!)
- Windows build - Fixed name clash in the WIIUSE_DEBUG macro
- Windows build - Fixed build of the SDL example


v0.15.4 -- 28-Nov-2018
--------------------

Fixed:

- Windows build - verified to work on VS Community 2017 from fresh install.

Changed:

- Removed `WCONST` macro of questionable value -
  it made some struct members "const" for consuming software,
  but non-const within the library.
  Made it too complex to maintain.
  Shouldn't really affect usage (doesn't change layout, etc.),
  but noted separately because it is technically a (very minor) API change.
- Removed broken links to old project web sites.

v0.15.3 -- 25-Nov-2018
--------------------

Fixed:

- Fixed forgotten version number
- Fixed library installation prefix on 64bit systems

v0.15.2 -- 25-Nov-2018
--------------------

Fixed the L2CAP channel setup on Linux, now we use only the
interrupt/data channel (0x13) and not the control channel (0x11). This
finally fixes the RVL-CNT-01-TR (gen 2) Wiimote. The control channel
is still kept open, in case something needs it in the future.

Cleaned the indentation by running the code through clang-format.

v0.15.1 -- 20-Nov-2018
--------------------

"Brown paper bag" release - missed some build-related pull requests
before tagging 0.15.

v0.15 -- 20-Nov-2018
--------------------

**Roll-up release of accumulated changes - library has been "stable" now
for some time**

Added:

- Callback API with constant-size wiimote_callback_data_t.
  Added to more easily support a ctypes python binding, generated
  by and included with RPythonic <http://code.google.com/p/rpythonic/>
  Thanks to hartsantler for this feature.

- Ability to build as a static library - must define WIIUSE_STATIC in
  client app as well as choosing the appropriate option when building
  WiiUse. The default is still a shared library (dll/so). Merged from
  paulburton and added to build system.

- Initial MotionPlus support. Thanks to admiral0 for the initial pull
  request merging from fwiine, and to Jan Ciger Reviatech SAS for building
  on it with fwiine and WiiC code as well as additional code. Try it out
  in the example by pressing 1 to start and 2 to stop.

- Full Mac support using Apple's native Bluetooth stack, based on [wiic](http://wiic.sourceforge.net/).

Fixed:

- Properly disable rumbling when told to. Thanks to Jeff Baker from
  [Inv3rsion, LLC.](http://www.inv3rsion.com/)

- Builds properly now on mingw (both cross-compile and native).

- Improved reliability on Windows when running an app twice without dis-connecting
  the Wiimote (came as a part of the MotionPlus support.)

- Build system fixes.

Changed:

- Improved header includes using feedback from (include-what-you-use)[iwyu]

- Additional internal function `wiiuse_millisleep()` to reduce the number
  of `ifdef`s scattered through the code.

- Provide endianness-conversion and buffer/unbuffer functions, rather than
  a jumble of function-style macros and raw type punning. This should
  fix all aliasing warnings.

- Cleaned up README and CHANGELOG.

- Migrated repo to its own organization on GitHUb.

[iwyu]:http://code.google.com/p/include-what-you-use/

v0.14 -- 2 May 2011
-------------------

Added:

- Support for redirecting or disabling messages: function
  `wiiuse_set_output` in `wiiuse.h`. The preprocessor symbol
  `WIIUSE_HAS_OUTPUT_REDIRECTION` indicates the presence of this feature.
  Thanks to Johannes Zarl for this handy feature!

- Doxyfile and "doc" target to the build system, to easily make use of
  the documentation already in the code, along with doc cleanups and
  improvements. (rp)

- Added balance board code to example (Paul Burton, rp)

Fixed:

- Off-by-two overflow in IR dot ordering - thanks to Karl Semich (xloem on GitHub)

- Documentation typo fix - thanks to Johannes Zarl

- Check malloc results. (rp)

- Initialize an array entirely. (rp)

- Fixed reading of balance board data. (rp)

Changed:

- Cleaned up README. (rp)

- Removed references to the LGPL/noncommercial license, since it's
  confusing and not useful in a practical sense. See, e.g.,
  <http://lists.fedoraproject.org/pipermail/legal/2010-November/001470.html>

- Renamed bundled workaround stdint.h header for Visual Studio,  which
  we still have to use on MSVC 2010 for some unknown reason. (rp)

v0.13.1 -- 11 November 2010
---------------------------

Fixed:

- Fix crashers due to unchecked pointer use.

- [Windows] Fix crashers due to unchecked pointer use.

v0.13 -- 11 November 2010
-------------------------

Added:

- Support for Wii Balance Board ("wiiboard"): your code can
  `#ifdef EXP_WII_BOARD` (support based in part on code from TU-Delft)

- CMake-based cross-platform build system

- Version defines in `wiiuse.h`

Fixed:

- [Linux] Bluez issue with not initializing structure on newer kernels

- Use `stdint.h` types for guaranteed type size independent of platform

- Bundle a suitable `stdint.h` for MSVC builds

- Setting IR to off before handshake complete actually respected now.
   (fix via Harald <Gotterdammerung@web.de>)

Changed:

- Old makefiles and Visual Studio projects removed.

- CMake allows easy building of binary packages with a uniform
  directory structure: .dll/.exe in bin, .lib/.so in lib, .h in
  include.

v0.12 -- 2 Apr 2008
-------------------

Added:

- API function `wiiuse_set_ir_sensitivity()`

- Macro `WIIUSE_GET_IR_SENSITIVITY()`

- Event type `WIIUSE_READ_DATA`

- Event type `WIIUSE_UNEXPECTED_DISCONNECT`

Fixed:

- [Linux] Ability to try to `select()` nothing

- [Linux] Changed Makefile to include debug output when compiling in debug mode

Changed:

- `wiiuse_set_nunchuk_orient_threshold()` now takes a`wiimote_t` pointer

- `wiiuse_set_nunchuk_accel_threshold()` now takes a `wiimote_t` pointer

- `wiiuse_read_data()` generates an event `WIIUSE_READ_DATA` rather than
  executing a callback

v0.11 -- 25 Feb 2008
--------------------

Added:

- API function `wiiuse_set_nunchuk_orient_threshold()`

- API function `wiiuse_set_nunchuk_accel_threshold()`

- Event type `WIIUSE_NUNCHUK_INSERTED`

- Event type `WIIUSE_NUNCHUK_REMOVED`

- Event type `WIIUSE_CLASSIC_CTRL_INSERTED`

- Event type `WIIUSE_CLASSIC_CTRL_REMOVED`

- Event type `WIIUSE_GUITAR_HERO_3_CTRL_INSERTED`

- Event type `WIIUSE_GUITAR_HERO_3_CTRL_REMOVED`

Fixed:

- Added some missing function prototypes to wiiuse.h

- [Linux] Fixed Makefile to link libmath and libbluetooth

- Status event is set when a status report comes in

- Orientation threshold not being saved in lstate

v0.10 -- 11 Feb 2008
--------------------

Added:

- Real dynamic linking (by noisehole)

- Changed from callback to SDL style

- Guitar Hero 3 controller support

- API function `wiiuse_set_accel_threshold()`

- API function `wiiuse_version()`

- Macro `WIIUSE_USING_SPEAKER()`

- Macro `WIIUSE_IS_LED_SET(wm, num)`

- `wiiuse_init()` now autogenerates unids

- `orient_t::a_roll/a_pitch`

- `wiiuse_resync()`

- `wiiuse_cleanup()`

- `wiiuse_set_timeout()`

Fixed:

- [Windows] Fixed bug where it did not detect expansions on startup

- Renamed `INFO/WARNING/DEBUG` macros to `WIIUSE_*` (by noisehole)

- Updated Makefiles (by noisehole)

- Fixed incorrect roll/pitch when smoothing was enabled

- Fixed nunchuk and classic controller flooding events when significant changes occurred

- Fixed bug where IR was not correct on roll if IR was enabled before handshake

Removed:

- `wiiuse_startup()`, no longer needed

v0.9 -- 3 Nov 2007
------------------

Fixed:

- Can now use `include/wiiuse.h` in C++ projects.

- HOME button works again.

- IR now functions after expansion is connected or removed.

v0.8 -- 27 Oct 2007
-------------------

Changed:

- Bumped API version to 8

- Exported all API functions for usage with non-C/C++ languages.

- Changed event callback to only trigger if a significant state change
  occurs.

Added:

- `wiimote_t::lstate` structure

Fixed:

- Bug 1820140 - Buffer overflow in `io_nix.c`. Thanks proppy.

v0.7 -- 19 Oct 2007
-------------------

Changed:

- Bumped API version to 7

- Renamed Linux build from `wii.so` to `wiiuse.so`

- Changed version representation from float to const char*.

Added:

- [Windows] BlueSoleil support.

- [Windows] Bluetooth stack auto-detection (WinXP SP2, Bluesoleil,
  Widdcomm tested).

- [Windows] API function `wiiuse_set_bluetooth_stack()`.

- Calculates yaw if IR tracking is enabled.

Fixed:

- [Windows] Problem where a connection is made to a wiimote that does
  not exist.

- [Windows] Issue that occurred while using multiple wiimotes.

v0.6 -- 16 Oct 2007
-------------------

Changed:

- Bumped API version to 0.6.

- Ported to Microsoft Windows.

- Improved IR tracking.

- Default IR virtual screen resolutions changed depending on 16:9 or 4:3.

Added:

- `src/msvc/` and `api/msvc/` - Microsoft Visual C++ 6.0 project files.

v0.5 -- 13 Oct 2007
-------------------

Changed:

- Bumped API version to 0.5.

- Greatly improved IR tracking.

- Renamed function `wiiuse_set_ir_correction()` to `wiiuse_set_ir_position()`.

Added:

- API function `wiiuse_set_aspect_ratio()`

Fixed:

- When rolling around 180 degree rotation smoothing would not be seemless.

v0.4 -- 08 Oct 2007
-------------------

Changed:

- Bumped API version to 0.4.

- Greatly improved classic controller joystick functionality.

- Changed all functions named `wiimote_*()` to `wiiuse_*()`

- Renamed many macros from `WIIMOTE_*` to `WIIUSE_*`

Added:

- IR support

- New `WIIMOTE_CONTINUOUS` flag to set continuous reporting

- Macro `IS_JUST_PRESSED()`

- Macro `WIIUSE_USING_ACC()`

- Macro `WIIUSE_USING_EXP()`

- Macro `WIIUSE_USING_IR()`

- API function `wiiuse_set_ir()`

- API function `wiiuse_set_ir_vres()`

- API function `wiiuse_set_ir_correction()`

- `gfx/` - A small OpenGL example that renders IR data

Fixed:

- Sometimes classic controller would only report infinite angle and magnitude for joysticks.

v0.3 -- 10 Sept 2007
--------------------

Changed:

- Moved license to GPLv3.

- Bumped API version to 0.3.

Added:

- Support for Classic Controller

- Smoothing for roll and pitch values of the wiimote and nunchuk.

- API: `wiimote_set_flags()` to set or disable wiimote options.

- API: `wiimote_set_smooth_alpha()` to set smoothing alpha value.

Fixed:

- When the wiimote accelerates the roll or pitch is unreliable and was
  set to 0. It now remains at previous tilt value.

- If no event callback was specified then no events would be processed
  internally.

v0.2 -- 25 Aug 2007
-------------------

Changed:

- Bumped API version to 0.2.

Added:

- Nunchuk support.

- Ability to write to flash memory.

Fixed:

- Roll and pitch rotation now ranges from -180 to 180 degrees
  (previously -90 to 90).

- Bug when reading data from flash memory would read wrong address.

v0.1 -- 23 Feb 2007
-------------------

- Initial release
