Skip to content

jkquickstar/tide75-firmware

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Epomaker TIDE 75 — Community Firmware

Community-maintained QMK firmware for the Epomaker TIDE 75 mechanical keyboard (tri-mode: USB / Bluetooth / 2.4GHz wireless).

This firmware fixes three critical bugs in the stock Epomaker firmware. All fixes have been submitted as pull requests to the official repository, but remain unmerged as of March 2026. This repo provides a pre-compiled binary so you can flash the fixes immediately without setting up a build environment.


Quick Start

  1. Download epomaker_tide75_default.bin from the latest release
  2. Enter bootloader mode — hold Escape while plugging in USB
  3. Flash using QMK Toolbox — select the .bin file, click Flash
  4. Done — unplug and reconnect. All three fixes are now active.

Note: Holding Escape while connecting will also reset your keyboard settings (RGB mode, etc.) to defaults. If you want to preserve settings, use the Fn+RShift+Esc method instead (see Flashing below).


Bug Fixes

1. USB Wake from Sleep

Upstream PR: Epomaker/tide75#4

Symptom: Keyboard becomes completely unresponsive after the host computer wakes from sleep/hibernate while connected via USB. Requires unplugging and reconnecting.

Root cause: suspend_power_down() is called when the host suspends, but suspend_wakeup_init() is never called on resume, leaving the keyboard in a suspended state.

Fix: Track the USB suspend state and properly call suspend_wakeup_init() when the host resumes.


2. Debounce / Double Keypress

Upstream PR: Epomaker/tide75#5

Symptom: Intermittent double key registrations — pressing a key once occasionally types the character twice.

Root cause: The stock firmware has no explicit debounce configuration, defaulting to an inadequate value for mechanical switches. Additionally, force_nkro is enabled, which can cause compatibility issues with certain hosts and KVM switches.

Fix: Set explicit debounce of 8ms (matching QMK recommended defaults) and disabled force_nkro.


3. Wireless Modifier + First-Character Drops

Upstream PR: Epomaker/tide75#6

Symptom: After the keyboard wakes from idle sleep in wireless mode (2.4GHz or Bluetooth), modifier keys are dropped and the first character typed is lost. For example:

  • Cmd+Shift+4 registers as $ (Shift+4, with Cmd lost) instead of triggering macOS screenshot
  • Cmd+C does nothing (Cmd lost, just types 'c')
  • Typing "hello" after idle produces "ello" (first character lost)

Root cause: Two independent issues compound:

  1. Modifier destruction: The low-power wakeup callback (lpwr_wakeup_cb) calls suspend_wakeup_init() which invokes clear_mods() approximately 200ms after the MCU wakes. By that point, the main loop has already scanned the wake-up keys and registered their modifiers. clear_mods() destroys that state, and because held keys aren't re-processed by the matrix debouncer (it sees them as already pressed), the modifiers are never re-registered.

  2. Cold radio link: The 2.4GHz radio link is cold after sleep. The first HID report is sent before the radio re-establishes, so it is lost over the air.

Fix (multi-layered, developed over 15 iterations of debugging):

  • Override lpwr_wakeup_cb() to skip the destructive clear_mods() call — the keyboard only sleeps after 1 minute of idle (no keys held), so there is no stale state to clear
  • Prime the radio module on wakeup via wireless_devs_change() to begin re-establishing the link immediately
  • Post-sleep resync: re-deliver keyboard state at 15ms intervals for 1200ms after wake, ensuring the first keypress is delivered once the radio warms up (~60-80ms)
  • Skip NKRO overflow messages during resync to prevent a modifier race condition between 6KRO and NKRO radio packets
  • Periodic keepalive (1000ms) to prevent the radio link and dongle USB from entering power-saving modes
  • Dedup cache invalidation API added to QMK core for resync support

Flashing

Enter Bootloader Mode

Method How Notes
Reset switch Hold the Reset switch on the bottom of the PCB while connecting USB Requires physical access to PCB
Escape key Hold Escape while connecting USB Resets keyboard settings to defaults
Key combo Press Fn + Right Shift + Escape Works with default keymap, preserves settings

Flash the Binary

Option A — QMK Toolbox (recommended for most users)

  1. Download and install QMK Toolbox
  2. Open QMK Toolbox, select epomaker_tide75_default.bin
  3. Put the keyboard in bootloader mode
  4. Click Flash

Option B — Command line

wb32-dfu-updater_cli -t -s 0x08000000 epomaker_tide75_default.bin

Verify the Binary

Property Value
File epomaker_tide75_default.bin
Size 61,152 bytes
SHA256 a663a89c0ba7df5d15286d9b089900ccbec1009827b4a94e55735a13ccd83ea4
shasum -a 256 epomaker_tide75_default.bin
# Should output: a663a89c0ba7df5d15286d9b089900ccbec1009827b4a94e55735a13ccd83ea4

Building from Source

For advanced users who want to modify or rebuild the firmware.

Prerequisites

  • QMK CLI installed and configured
  • ARM GCC toolchain (arm-none-eabi-gcc)

Build Steps

  1. Clone the Epomaker QMK fork:

    git clone https://github.com/hangshengkeji/qmk_firmware.git
    cd qmk_firmware
    git checkout tri-mode
    git submodule update --init --recursive
  2. Overlay the patched source files:

    # Keyboard source (into keyboards/epomaker/tide75/)
    cp -r /path/to/tide75-firmware/src/tide75/* keyboards/epomaker/tide75/
    
    # QMK core patches
    cp src/quantum/action_util.c quantum/action_util.c
    cp src/quantum/action_util.h quantum/action_util.h
  3. Compile:

    qmk compile -kb epomaker/tide75 -km default
  4. The output binary will be at .build/epomaker_tide75_default.bin


Hardware Info

Property Value
Keyboard Epomaker TIDE 75
Connectivity USB / Bluetooth / 2.4GHz wireless
Processor WB32FQ95 (ARM Cortex-M3)
Bootloader wb32-dfu
Firmware base QMK (Epomaker fork)
Matrix 6 rows x 15 columns
RGB WS2812 (per-key RGB matrix)
Encoder 1 rotary encoder

Upstream Status

All fixes have been submitted to the official Epomaker repository. As of March 2026, none have been merged:

PR Fix Status
#4 USB wake from sleep Open
#5 Debounce / double keypress Open
#6 Wireless modifier + first-character drops Open

If and when these PRs are merged upstream, this repository may be archived.


License

This project is licensed under the GNU General Public License v2.0, consistent with the upstream QMK firmware and Epomaker source code.

Credits

  • Epomaker — Original TIDE 75 firmware and hardware
  • QMK Firmware — Open-source keyboard firmware framework
  • @jkquickstar — Bug investigation, fixes, and community firmware

About

Community firmware for the Epomaker TIDE 75 keyboard — fixes USB wake, debounce, and wireless modifier drops

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors