Skip to content

Fazzoc/air75-v2

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

61 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Version MCU License Status

⌨️ Air75 V2 — NuPhy QMK Firmware

Welcome to the high-performance QMK firmware optimization fork for the NuPhy Air75 V2 wireless mechanical keyboard. This repository is dedicated to pushing the performance, latency, and power-efficiency boundaries of the Air75 V2 hardware.

This firmware was adapted to work with the Air75 V2, forked from the Air96 V2 custom firmware by GosuDRM

Only the air75_v2/ansi keyboard is maintained. All other keyboards have been removed to keep this repository focused, lightweight, and streamlined.

🛠️ Build

qmk compile -kb air75_v2/ansi -km default

Binary output: air75_v2_ansi_default.bin

⚡ Flash

📥 Download Pre-compiled Release Firmware (air75-v2-c-v3.2.2.bin)

Hold the Escape key while plugging in the USB cable to enter DFU mode, then follow the instructions for your operating system:

🐧 Linux

Install dfu-util via your package manager (e.g. sudo apt install dfu-util or sudo pacman -S dfu-util), then run:

dfu-util -d 0483:DF11 -a 0 -s 0x08000000:leave -D air75-v2-c-v3.2.2.bin

Note: You may need sudo or to configure QMK udev rules to flash without root privileges.

🍎 macOS

Install dfu-util via Homebrew:

brew install dfu-util
dfu-util -d 0483:DF11 -a 0 -s 0x08000000:leave -D air75-v2-c-v3.2.2.bin

Alternatively, you can download and use the graphical QMK Toolbox.

🪟 Windows

  1. Download and run the graphical QMK Toolbox.
  2. Select air75_v2_ansi_default.bin as the Local File.
  3. Set the Microcontroller to STM32F072.
  4. Check the Auto-Flash checkbox.
  5. Hold the Escape key and plug in the USB cable. The flashing process will start automatically.

🌟 Highlights (v3.0.0 → v3.2.2)

This firmware has undergone extensive audit, bug-fixing, and performance hardening compared to the original base port. Below are the notable achievements across the v3.x branch:

  • 🔄 Stability Overhaul (v3.2.2): Multi-pass audit fixing sleep/wake lockup, mode-switching state leaks, LED flicker, and UART protocol edge cases. NRF sleep requests are now rejected when USB is active, all sync counters reset on mode switch, battery indicator auto-dismisses after 10s, and key debounce raised from 1ms to 5ms to eliminate double keypresses.
  • ⚡ Zero-Latency Wake & Command Hardening: Solved a critical wait-for-ACK loop blocking issue in rf.c, restoring immediate, non-blocking serial parsing. Wireless startup dead-time has been slashed 5.4× (1250ms → 230ms), and inline wakeup logic ensures that the first keystroke after deep sleep is preserved and registered within 2.7ms (previously lost + 75ms).
  • 🔋 Power Consumption & USB Compliance: Prescaled state synchronization checks in wired mode to save 2-3mA on battery. The sleep handler has been hardened to force LED and NRF power-downs during USB suspend even when auto-sleep is disabled, fully satisfying the USB suspend current draw limits (0.5mA / 2.5mA max).
  • 🧠 Layout & UX Refinements: Added deferred NumLock auto-on signaling synchronized with USB enumeration to match high-end custom firmware. Reduced Spotlight and screenshot key chord blocks from 50ms to 5ms for rapid, lag-free OS registration.
  • 🧹 Code Quality & Footprint Optimization: Eliminated all brace omissions, implicit boolean conversions, and scoped local variables to their narrowest blocks. Transitioned the battery LED indicator to a dynamic loop with lookup arrays, optimizing compiler generation and limiting the final binary footprint to 56,862 bytes (including all custom features).
  • 📜 Full Revision History: See CHANGELOG.md for the complete record of all engineering optimizations, bug fixes, and releases.

📊 Performance & Optimization Summary

Metric / Feature Upstream (v3.0.0 Base) Optimized Latest (v3.2.2) Impact & Improvement
Startup Dead-Time 1250ms (worst-case) ~230ms 5.4× faster boot-up & instant availability
Active Periodic UART Utilization 11.3% 0.9% 12.5× reduced wireless bus congestion
Per-Report UART Payload Time 2.35ms (brute 3× repeats) 0.72ms (reliable 1× transmit) 3.26× faster keystroke packet dispatch
Keystroke Transmission Latency ~4.0ms ~1ms Ultra-low latency key-press registration
Deep-Sleep First-Key Wakeup Keystroke lost + 75ms delay Keystroke preserved + 2.7ms wakeup No missed keystrokes after idle/sleep
Mac Spotlight/Screenshot Lag 50ms key-chord delay 5ms optimized chord delay Eliminated sluggish OS-shortcut latency
USB Suspend Power Draw Exceeded limits (up to 20mA) Compliant < 2.5mA limit 100% Standard USB Compliance (stops battery drain)
UART Loop Transmit Blocked 5–10ms per wireless cmd Non-blocking (0ms) concurrent polling Zero boot/wakeup locks, flawless channel switching
Key Debounce 1ms (double keypresses) 5ms sym_eager_pk Zero phantom repeats, matches mechanical switch bounce
Binary Footprint 56,490 bytes 56,862 bytes Feature-rich layout optimized for performance and completeness

✨ Features

  • Bluetooth LE + 2.4 GHz wireless (NRF52832 module)
  • Wired USB HID (keyboard + consumer + system control)
  • 5-layer keymap (Mac/Win base + Fn layers)
  • Side LED animations (wave/mix/static/breath/off)
  • Dual ws2812 RGB matrix (94 LEDs)
  • EEPROM config persistence
  • DFU bootloader entry (Escape key at boot)

📜 License

GPL-2.0-or-later — derived from QMK firmware and NuPhy's keyboard code.

About

Nuphy Air75 v2 Custom Firmware (Forked from GosuDRM's Air96 v2 custom firmware)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C 76.4%
  • C++ 14.8%
  • Python 5.6%
  • Makefile 2.1%
  • Linker Script 0.6%
  • Shell 0.3%
  • Other 0.2%