# Changelog All notable changes to this project will be documented in this file. The format is loosely based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to the [UHK Versioning](VERSIONING.md) conventions. ## [8.3.1] - 2018-06-07 Device Protocol: 4.3.1 | Module Protocol: 4.0.0 | User Config: 4.1.0 | Hardware Config: 1.0.0 - Fix media key repetition bug on Windows. - Fix bug that made Windows unable to sleep when the UHK was plugged in. - Fix bug that made Chrome Remote Desktop blocked from interacting on Windows. - Fix bug that made locked layers not release. This bug was introduced in the previous release. ## [8.3.0] - 2018-06-03 Device Protocol: 4.3.1 | Module Protocol: 4.0.0 | User Config: 4.**1.0** | Hardware Config: 1.0.0 - Make the config parser handle switch layer actions with hold on double tap disabled. `USERCONFIG:MINOR` - Set key debounce timeout from 80ms to 100ms. This should further reduce key chattering. ## [8.2.5] - 2018-05-27 Device Protocol: 4.3.1 | Module Protocol: 4.0.0 | User Config: 4.0.1 | Hardware Config: 1.0.0 - Now really fix the bug that made the hardware and user configuration not load from the EEPROM on some hosts right after firmware update. ## [8.2.4] - 2018-05-21 Device Protocol: 4.3.**1** | Module Protocol: 4.0.0 | User Config: 4.0.1 | Hardware Config: 1.0.0 - Fix the bug that made the hardware and user configuration not load from the EEPROM on some hosts right after firmware update. - Set the signature of the hardware config to "FTY" in the RAM when the keyboard is in factory reset mode, allowing Agent to be aware of the factory reset state. `DEVICEPROTOCOL:PATCH` - Load the hardware and user configuration from the EEPROM even in factory reset mode. - Set key debounce timeout from 60ms to 80ms. This should further reduce key chattering. ## [8.2.3] - 2018-05-15 Device Protocol: 4.3.0 | Module Protocol: 4.0.0 | User Config: 4.0.1 | Hardware Config: 1.0.0 - Don't switch keymaps instead of playing macros. - Make saving the user configuration faster by only writing the part of the EEPROM which actually contains the user configuration. ## [8.2.2] - 2018-05-09 Device Protocol: 4.3.0 | Module Protocol: 4.0.0 | User Config: 4.0.**1** | Hardware Config: 1.0.0 - Parse long media macro actions. `USERCONFIG:PATCH` - Fix vendor-specific USB usage page entry. This makes the HIDAPI Linux/hidraw driver able to access interface 0. ## [8.2.1] - 2018-05-02 Device Protocol: 4.3.0 | Module Protocol: 4.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0 - Don't suppress modifier keys upon releasing a layer. - Restore Caps Lock indicator when saving the configuration. ## [8.2.0] - 2018-04-20 Device Protocol: 4.**3.0** | Module Protocol: 4.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0 - Change the scheduling of USB reports which changes mouse pointer speeds. - Disable LEDs while the host sleeps. - Make any key wake up the host while it sleeps. - Add UsbCommand_SwitchKeymap(). `DEVICEPROTOCOL:MINOR` - Make GCC optimize the release builds for execution speed (-O3). ## [8.1.5] - 2018-04-04 Device Protocol: 4.2.0 | Module Protocol: 4.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0 - Set key debounce timeout from 30ms to 60ms. This should eliminate key chattering. - Use the correct scancode for the menu key of the factory keymap. ## [8.1.4] - 2018-03-05 Device Protocol: 4.2.0 | Module Protocol: 4.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0 - Set key debounce timeout from 20ms to 30ms. This should eliminate key chattering. - Set double tap lock layer timeout from 250ms to 150ms. This should minimize the chance of locking layers accidentally by double tapping their keys. ## [8.1.3] - 2018-02-18 Device Protocol: 4.2.0 | Module Protocol: 4.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0 - Fix system keyboard descriptor, so it is byte-aligned. - Set key debounce timeout from 15ms to 20ms. This should at least reduce and hopefully eliminate key chattering. ## [8.1.2] - 2018-02-13 Device Protocol: 4.2.0 | Module Protocol: 4.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0 - Detect Caps Lock USB state and light up the Caps Lock icon of the LED display accordingly. - Set key debounce timeout from 10ms to 15ms. This should at least reduce and hopefully eliminate key chattering. ## [8.1.1] - 2018-02-11 Device Protocol: 4.2.0 | Module Protocol: 4.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0 - Lock layers every time when double-tapping their layer switcher keys, regardless of how many times the layer switcher key was tapped before. - Only lock layers via double-tapping if the second tap gets released within 100ms. ## [8.1.0] - 2018-01-15 Device Protocol: 4.**2**.0 | Module Protocol: 4.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0 - Enable left-half watchdog in reinit mode which seems to prevent freezes. - Slow down main bus I2C baud rate to 30kHz when BusPal is on to make firmware transfer more robust. - Implement UsbCommandId_GetSlaveI2cErrors. `DEVICEPROTOCOL:MINOR` - Implement UsbCommandId_SetI2cBaudRate. `DEVICEPROTOCOL:MINOR` - Implement DevicePropertyId_CurrentKbootCommand. `DEVICEPROTOCOL:MINOR` - Implement DevicePropertyId_I2cMainBusBaudRate. `DEVICEPROTOCOL:MINOR` - Implement DevicePropertyId_Uptime. `DEVICEPROTOCOL:MINOR` ## [8.0.1] - 2017-12-25 Device Protocol: 4.1.0 | Module Protocol: 4.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0 - Implement I2C watchdog for the left keyboard half which should resolve the occasional hangs of the left keyboard half. ## [8.0.0] - 2017-12-15 Device Protocol: 4.**1.0** | Module Protocol: **4.0.0** | User Config: 4.0.0 | Hardware Config: 1.0.0 - Make the modules transfer the module protocol version and firmware version composed of a major, a minor and a patch number. `MODULEPROTOCOL:MAJOR` - Query module key count and pointer count in separate messages instead of a combined message for improved clarity. `MODULEPROTOCOL:MAJOR` - Add new UsbCommand_GetModuleProperties() device protocol command. `DEVICEPROTOCOL:MINOR` ## [7.0.0] - 2017-12-14 Device Protocol: **4.0.0** | Module Protocol: 3.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0 - Make UsbCommand_JumpToModuleBootloader() more robust by not making it dependent on the state of the module driver. - Don't make horizontal scrolling and vertical scrolling affect each other. - Expose version numbers via the get property interface. `DEVICEPROTOCOL:MINOR` - Add DevicePropertyId_ConfigSizes. `DEVICEPROTOCOL:MINOR` - Remove DevicePropertyId_HardwareConfigSize and DevicePropertyId_UserConfigSize. `DEVICEPROTOCOL:MAJOR` ## [6.0.0] - 2017-12-12 Device Protocol: **3.0.0** | Module Protocol: 3.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0 - Change the value of almost every Device Protocol commands because there were unused intervals between them. `DEVICEPROTOCOL:MAJOR` - Disable LED display icons by default. - Update LED brightness levels upon applying the configuration. ## [5.0.1] - 2017-12-09 Device Protocol: 2.0.0 | Module Protocol: 3.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0 - Make key presses continue to emit scancodes even if a USB interface (typically the mouse interface) is not polled by the host anymore. - Make scrolling always immediately react to keypresses regardless of the previous internal scroll state. ## [5.0.0] - 2017-12-04 Device Protocol: 2.0.0 | Module Protocol: 3.0.0 | User Config: **4.0.0** | Hardware Config: 1.0.0 - Move pointerRole from keymaps to module configurations as pointerMode. Add angularShift, modLayerPointerFunction, fnLayerPointerFunction, and mouseLayerPointerFunction to module configurations. `USERCONFIG:MAJOR` ## [4.0.0] - 2017-11-30 Device Protocol: 2.0.0 | Module Protocol: 3.0.0 | User Config: **3.0.0** | Hardware Config: 1.0.0 - Implement mouse movement and scrolling deceleration and acceleration. - Toggle layers upon double tapping their keys. Make the double tap timeout configurable. - Make the parser read additional user configuration properties: userConfigMajorVersion, userConfigMinorVersion, userConfigPatchVersion, doubleTapSwitchLayerTimeout, iconsAndLayerTextsBrightness, alphanumericSegmentsBrightness, keyBacklightBrightness, mouseMoveInitialSpeed, mouseMoveAcceleration, mouseMoveDeceleratedSpeed, mouseMoveBaseSpeed, mouseMoveAcceleratedSpeed, mouseScrollInitialSpeed, mouseScrollAcceleration, mouseScrollDeceleratedSpeed, mouseScrollBaseSpeed, mouseScrollAcceleratedSpeed. `USERCONFIG:MAJOR` ## [3.0.0] - 2017-11-15 Device Protocol: **2.0.0** | Module Protocol: **3.0.0** | User Config: **2.0.0** | Hardware Config: 1.0.0 - Detect the use of USB interfaces and only wait for the ones that are actually used by the host. - Implement key debouncer. - Use the menu key in the factory keymap. - Make pressing the reset button revert to the factory preset. - Revert to the factory default state when the reset button is pressed upon firmware startup. Display FTY on the display in this case. - Make the LED display show the abbreviation of the current keymap even when it gets reinitialized by the I2C watchdog. - Swap SlaveCommand_RequestKeyStates and SlaveCommand_JumpToBootloader, thereby making SlaveCommand_JumpToBootloader the lower number because it's more essential and shouldn't change in the future. `MODULEPROTOCOL:MAJOR` - Suppress pressed keys upon layer switcher key release. - Handle secondary role modifiers and layer switchers. - Make UsbCommand_JumpToSlaveBootloader expect a slave slot id instead of a uhkModuleDriverId. `DEVICEPROTOCOL:MAJOR` - Set UsbResponse_InvalidCommand upon encountering with an invalid USB command. `DEVICEPROTOCOL:MINOR` - Remove UsbCommandId_ReadMergeSensor now that it can be queried via UsbCommandId_GetKeyboardState. `DEVICEPROTOCOL:MAJOR` - Make the getAdcValue and getDebugInfo USB commands utilize the first byte of the response to provide status as dictated by the UHK protocol. `DEVICEPROTOCOL:MAJOR` - Switch keymap only upon keypress. - Handle layer toggle actions. - Keep the active layer active even if another layer switcher key gets pressed while holding it. - Read the new UserConfig.userConfigLength user config field. `USERCONFIG:MAJOR` - Change Ctrl and Alt back according to the official UHK factory keymap. - Update system keyboard HID descriptor which doesn't make the pointer go to the top left corner on OSX anymore. - Scan keyboard matrices in a more efficient manner from timer interrupts instead of the main loop. - Add UsbCommand_SendKbootCommand. `DEVICEPROTOCOL:MINOR` - Make the reenumerate USB command accept a timeout value. `DEVICEPROTOCOL:MINOR` - Make the config parser read the device name. `USERCONFIG:MAJOR` - Update release file format containing device and module directories and hex files instead of srec. - Remove obsolete ARM GCC build files. ## [2.1.0] - 2017-10-13 Device Protocol: 1.**2.0** | Module Protocol: 2.**1.0** | User Config: 1.0.0 | Hardware Config: 1.0.0 - Add jumpToSlaveBootloader USB and Module Protocol command. `DEVICEPROTOCOL:MINOR` `MODULEPROTOCOL:MINOR` - Fix generic HID descriptor enumeration error. ## [2.0.0] - 2017-10-10 Device Protocol: 1.**1.0** | Module Protocol: **2.0.0** | User Config: 1.0.0 | Hardware Config: 1.0.0 - Read the hardware and user configuration area of the EEPROM upon startup and set the default keymap. - Greatly improve the I2C watchdog and drivers. Communication between the halves or the add-ons should never fail again. - Implement generic enumeration sequence and per-slave state for UHK modules, allowing add-ons to be added. `MODULEPROTOCOL:MAJOR` - Make the master cache the output fields of slave modules, allowing for more frequent input updates. - Optimize I2C protocol scheduler resulting in increased roustness and more efficient use of I2C bandwidth. - Add I2C message headers containing a length header, allowing for variable-length messages and a CRC16-CCITT checksum, allowing for robust communication. `MODULEPROTOCOL:MAJOR` - Add mechanism to dump the internal state of the KL03 via SPI for debugging purposes. - Add merge sensor state and attached module IDs to GetDebugInfo(). `DEVICEPROTOCOL:PATCH` - Throw ParserError_InvalidKeymapCount if keymapCount == 0. `USERCONFIG:PATCH` ## [1.0.0] - 2017-08-30 Device Protocol: 1.0.0 | Module Protocol: 1.0.0 | User Config: 1.0.0 | Hardware Config: 1.0.0 - First Release