# Changelog
All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
### Added
- Support for G531
- Support for G731

## [0.15.3] - 2020-07-21
## Changed
- GX531 reverted to zone profile, G531 moved to per-key profile

## [0.15.2] - 2020-07-21
## Changed
- GX531 now supports same LED features as GX502

## Added
- Support for G532

## [0.15.0] - 2020-07-09
### Changed
- Support "Calc" fn key on G712
- ROG key has limited customization, see README.md for details.
  + Power
  + Sleep
  + MediaRecord
  + MediaFastFwd
  + MediaRewind
  + MediaNext
  + MediaPrev
  + MediaStop
  + MediaPlayPause
  + MediaVolMute
  + MediaVolUp
  + MediaVolDown
  + BacklightInc
  + BacklightDec
  + ControlConfig
  + LaunchTextEditor
  + LaunchEmailApp
  + LaunchNewsReader
  + LaunchCalendar
  + LaunchCalculator
  + LaunchWebBrowser
  + FileBrowser

### BREAKING
- `"rog_key": "ControlConfig",` is required to be added below line 1 in `/etc/rogcore.conf`
  alternatively the config can be removed, allowing it to be recreated.

## [0.14.5] - 2020-07-07
### Changed
- Correct some device handling and order of operations

### BREAKING
- Not quite breaking, but the serice should now be static (not enabled) and
  the udev rule `data/rog-core.rules` used to start the service. This ensures
  the device is actually initialised fully before the service starts.

## [0.14.4] - 2020-07-07
### Changed
- Changes to the way rog-core is initialised

## [0.14.3] - 2020-07-05
### Changed
- Proper fix of laptop mode conversion bug

## [0.14.2] - 2020-07-04
### Changed
- Try to correct how laptop modes are handled

## [0.14.1] - 2020-07-04
### Added
- Support for G512 series
- Support for GU502 (variant of GA15)

## [0.14.0] - 2020-07-01
### Changed
- Further refine the way setting LED modes works so it is more universal, this
  also allows for setting the brightness through `SetKeyBacklight`

### Added
- `README_DBUS.md` to document DBUS interface
- Dbus method `GetKeyBacklight`
- Dbus method `GetKeyBacklightModes`

## [0.13.1] - 2020-06-29
### Fixed
- Properly initialise the device
- Better log formatting

## [0.13.0] - 2020-06-29
### Changed
- Dbus command `LedWriteBytes` renamed to `SetKeyBacklight`
- Dbus command `SetKeyBacklight` will now take a JSON string instead of an array of bytes
  + Example:
    ```
    {
      "Breathe": {
        "help": false,
        "colour": [
          254,
          5,
          171
        ],
        "colour2": [
          0,
          156,
          156
        ],
        "speed": "High"
      }
    }
    ```
    note that `help` is unused but required as a side-effect of using `gumdrop`
    for CLI.
- Dbus signal `LedCancelEffect` renamed to `KeyBacklightChanged`
- Config file is now in JSON format, and will store only the LED modes that a laptop
  supports rather than the whole set

## [0.12.2] - 2020-06-29
### Changed
- "FanMode", "ChargeLimit" to "SetFanMode", "SetChargeLimit"
 
### Added
- Dbus signals "FanModeChanged", "ChargeLimitChanged"
- Dbus methods "GetFanMode", "GetChargeLimit"
- Support for ROG Strix G712

## [0.12.0] - 2020-06-26
### Changed
- Add modes for FX531 LEDs
- Change where USB reset is called
- Add support for G531GT
- Remove duplicated code: it looks like there is at least *some* consistency in Consumer-Device keycodes that ASUS uses

### BREAKING CHANGE
- `bat_charge_limit = 100` must be appended to the top of `/etc/rogcore.conf`

## [0.11.1] - 2020-06-11
### Changed
- Use DBUS_NAME instead of DBUS_IFACE when requesting the name
- Give different names for the bytearray arguments so that pydbus is not confused
- Add org.freedesktop.DBus.Method.NoReply annotations
- Remove dbus reply for multizone writes
- Move led_writer to a main loop due to strange mpsc behaviour, this combined with
  mpsc channels offers a more reactive app
- Small fix for unreported mode indexing issue

## [0.11.0] - 2020-06-09
### BREAKING CHANGE
- Many of the RGB built-in modes have been renamed to match Armory-Crate names,
  this means that the `/etc/rogcore.conf` needs to be removed so it can be
  regenerated using the updated names.

### Changed
- Add better examples for AniMe display, and fix many small issues
- Don't halt app iff AniMe display not found when running on GA14/GA15 laptops
- Rename client crate to better suit
- Added a device reset for both keyboard and AniMe devices before configuring them

## [0.10.0] - 2020-05-23
### Changed
- Correctly set AMD boost
- Add animatrix support for G14 laptops

## [0.9.7] - 2020-05-23
### Changed
- Start differentiating between models using the 0x1866 USB device
- Refactor how to send multizone over dbus, and how to write it (write 4 packets before writing SET/APPLY)
- Begin implementing profiles per board_name
- Boost toggle for AMD (not freq adjustment yet)

## [0.9.6] - 2020-05-22
### Changed
- Fix  needing to double-tap fan-mode to change mode

## [0.9.5] - 2020-05-22
### Changed
- Flip writing order of effect colour blocks every other block write to try
  and even out. Previously the bottom rows were always last to be written.
- Add more examples: ball, comet, pulser.
- Refine the keyboard layout grid for GX502.
- Use tokio to delay main loop, not thread::sleep
- Minor tweaks to error handling. Needs refactor of errors.

## [0.9.4] - 2020-05-05
### Changed
- Fix reloading last keyboard brightness on boot

## [0.9.3] - 2020-05-04
### Changed
- Fixed return of rog-core in client mode
- Fixed writing of customised builtin LED modes

## [0.9.2] - 2020-05-04
### Added
- Begin keeping a Changelog

### Changed
- Internal structure changes to reduce the possibility of mutex await deadlocks when
  writing to the LED endpoint
