4.2 DC22 Tri-mode (work in progress)
22-key tri-mode numeric keypad · USB / Bluetooth / 2.4G
Work in progress
The wired (USB) channel is verified on real hardware: enumeration, typing, VIA remapping and saving to flash all work.
The following are not yet verified on hardware, and specs / keymap may still change: Bluetooth (BLE), 2.4G, low power, audio-reactive lighting.
1. Basic specs
| Spec | Value | Notes |
|---|---|---|
| Keys | 22 | Direct GPIO, no matrix, no diodes |
| Layers | 4 | 0 base / 1 FN / 2 lighting (FN2) / 3 user (empty from factory) |
| Connection | Tri-mode: USB wired / Bluetooth BLE / 2.4G | Bluetooth & 2.4G work in progress |
| MCU | CH582M (RISC-V4A, 448K Flash / 32K RAM) | In-house firmware (not QMK / ZMK) |
| Port | Type-C | USB2 path |
| C2C | Supported | |
| Scan period | 1 ms | 5 ms debounce |
| Polling rate | TBD | |
| Latency | TBD | |
| N-Key rollover | Supported | NKRO bitmap report; FN + 7 toggles NKRO / 6KRO |
| Full keys customizable | Supported | VIA online remap, USB channel only |
| Lighting | 22 per-switch RGB LEDs, bottom | 49 effects; audio-reactive needs a PC tool pushing the spectrum |
| Battery | Built-in Li-ion, Type-C charging | Battery measurement not implemented; reports a fixed 100% over BLE |
| Sleep timeout | TBD | |
| Kit size / weight | TBD | |
| Firmware platform | In-house CH582 firmware | Not QMK / ZMK |
| Source code open | WIP | Repo is being cleaned up, not public yet |
2. Shortcuts
Factory defaults. All of them can be changed in VIA (see section 6); changes persist across power loss.
2.1 Base layer
Standard numpad: 0~9, ., /, *, -, +, Enter, NumLock, Home, End, PgUp, PgDn, plus one FN key.
2.2 FN layer (hold FN)
| Shortcut | Keycode (VIA) | Function | Notes |
|---|---|---|---|
| FN + 1 | Mode BT1 | Switch to Bluetooth profile 1 | Broadcast name czm_dc22_ble1; LED blinks blue, solid once connected |
| FN + 2 | Mode BT2 | Switch to Bluetooth profile 2 | Broadcast name czm_dc22_ble2 |
| FN + 3 | Mode BT3 | Switch to Bluetooth profile 3 | Broadcast name czm_dc22_ble3 |
| FN + 4 | Mode USB | Back to USB wired | LED under P4 stays green for 3 s |
| FN + 5 | Mode 2G4 | Switch to 2.4G | Work in progress; LED under P5 stays purple for 3 s |
| FN + 8 | BT Next | Next Bluetooth profile | Equivalent to FN + 1/2/3, cycles through |
| FN + 6 | BT Pair | Bluetooth re-pair | Advertises for 30 s; any host can pair during that window |
| FN + 7 | NKRO | Toggle NKRO / 6KRO | Saved to flash |
| FN + 0 | Battery | Report battery level | Works over Bluetooth; not implemented over USB |
| FN + . | Bootldr | Enter bootloader (flashing) | |
| FN + PgUp | Reset | Restore the factory keymap | |
| FN + / | Volume - | Media key | Not available over Bluetooth / 2.4G |
| FN + * | Volume + | Media key | Not available over Bluetooth / 2.4G |
| FN + - | Mute | Media key | Not available over Bluetooth / 2.4G |
| FN + + | Play / pause | Media key | Not available over Bluetooth / 2.4G |
| FN + Enter | Calculator | Media key | Not available over Bluetooth / 2.4G |
| FN + Home | Previous track | Media key | Not available over Bluetooth / 2.4G |
| FN + End | Next track | Media key | Not available over Bluetooth / 2.4G |
2.3 FN2 lighting layer (long-press P/)
A short press of P/ is divide; holding it for about 0.2 s enters the FN2 layer. The lighting keys deliberately avoid the handiest FN-layer positions P1–P4 — those are reserved for mode switching.
| Shortcut | Keycode (VIA) | Function |
|---|---|---|
| Long-press P/ then 1 | LED + | Brightness + |
| Long-press P/ then 2 | LED - | Brightness - |
| Long-press P/ then 3 | LED Tog | Lighting on / off |
| Long-press P/ then 4 | LED Next | Next effect |
| Long-press P/ then 0 | Battery | Report battery level |
| Long-press P/ then . | Bootldr | Enter bootloader |
3. USB / Bluetooth / 2.4G
In one sentence: cable plugged in means USB; unplug and it returns to the last Bluetooth profile you used; once you switch manually it won't be pulled back.
3.1 Automatic switching
The firmware switches on the VBUS edge — you don't need to press FN + 4 in normal use:
| Event | Behavior |
|---|---|
| Plug in | Switches back to USB immediately and remembers the mode |
| Unplug while on USB | Returns to the last used Bluetooth profile; profile 1 if Bluetooth was never used |
| Unplug while not on USB (2.4G) | Stays put |
- You can switch to Bluetooth with the cable plugged in: after pressing
FN + 1/2/3it won't be pulled back to USB. - Powering up with the cable plugged in = USB first: you never boot into Bluetooth and have to press FN + 4.
- VBUS has 20 ms debounce, so plug wobble won't trigger it.
3.2 What happens when switching
- USB and Bluetooth are never connected at the same time. Switching to Bluetooth while plugged in makes the USB keyboard disappear from the host (the keyboard detaches from the bus); switching back re-enumerates.
- Before switching, the keyboard releases every held key, so you never end up with a stuck repeating key.
- VIA only works on the USB channel — over Bluetooth / 2.4G the device doesn't exist on the host. Press
FN + 4to return to USB before remapping.
3.3 Status LED
There is no dedicated status LED; the per-switch LED under the relevant key is used instead (deliberately dimmed, indication only):
| Event | LED | Pattern |
|---|---|---|
| Switched to Bluetooth / not yet connected | Under the matching number key (FN+1 → the 1 key) | Blinks blue until connected (no timeout) |
| Bluetooth connected | Same | Solid for 1.5 s, then back to the effect |
| Bluetooth dropped | Same | Back to blinking blue |
| Back to USB | Under the 4 key | Solid green for 3 s |
| Switched to 2.4G | Under the 5 key | Solid purple for 3 s |
"Connected" gets its own solid blink on purpose: "stopped blinking" and "the indicator gave up" look identical, so users can't tell from a non-blinking LED whether they are actually connected.
4. Bluetooth
4.1 Three pairing slots
The keyboard remembers 3 hosts, one per slot. A slot is not "the Nth device you paired" — the three slots are independent:
- Switching to a slot broadcasts with that slot's name:
czm_dc22_ble1/czm_dc22_ble2/czm_dc22_ble3; - Bonding info is stored in the keyboard (survives power loss), so reconnecting the same computer needs no re-pairing — switching to that slot reconnects automatically;
- Whichever slot is active shows as connected on that host; the other two show as disconnected.
⚠ Work in progress: switching slots only changes the broadcast name — directed reconnect to a specific host isn't implemented yet, so any already-paired host may connect. Per-slot directed reconnect waits on the "slot ↔ host address" table.
4.2 Pairing a new host
- Hold
FNand press1/2/3to pick a slot — the LED under that number key starts blinking blue; - In your computer's / phone's Bluetooth settings, find
czm_dc22_ble1(or2/3) and connect; - The LED goes solid for 1.5 s and returns to the effect — connected, ready to type.
4.3 Re-pairing
FN + 6: the keyboard advertises "anyone can connect" for 30 seconds. Useful for a new computer or when bonding info got messy. If no host connects within 30 s, advertising stops (saves power and keeps the keyboard out of other people's Bluetooth lists).
4.4 Known limitations
- Media keys don't work: volume / playback / calculator do nothing over Bluetooth. The stack's keyboard service has no consumer report; adding it means changing the HID report descriptor, scheduled after the basic channels are verified on hardware.
- Idle disconnect: Bluetooth disconnects after 60 seconds of idle to save power; any key press reconnects.
- Never verified on hardware: everything above comes from the firmware code; the first hardware run may still need changes.
5. 2.4G wireless
Work in progress. FN + 5 currently only switches the channel and lights the purple LED once — it produces no input; RF transmit and the USB receiver aren't done.
6. Remap with VIA
- Connect the keyboard to the computer with a Type-C cable and press
FN + 4to make sure you're on the USB channel (VIA only works over USB); - Open usevia.app (or via.micah.vip);
- Load this keyboard's JSON, then remap.
Keymaps are stored in the keyboard — they survive power loss and moving to another computer. FN + PgUp restores the factory keymap.
Besides regular keycodes, the VIA picker also offers this keyboard's own functions (VIA names):
| VIA name | Function |
|---|---|
| Mode USB | Switch to USB wired |
| Mode BT1 / BT2 / BT3 | Switch to Bluetooth profile 1 / 2 / 3 |
| BT Next | Next Bluetooth profile |
| BT Pair | Bluetooth re-pair |
| Mode 2G4 | Switch to 2.4G (work in progress) |
| NKRO | Toggle NKRO / 6KRO |
| Battery | Report battery level |
| LED Tog / LED + / LED - / LED Next | Lighting on-off / brightness up-down / next effect |
| Bootldr | Enter bootloader |
| Reset | Restore the factory keymap |
7. Lighting
- 22 per-switch LEDs, 49 effects; brightness / effect / speed / hue / saturation are all saved across power loss;
- Effects are switched in the FN2 layer (long-press
P/); - Audio reactive (listed as Audio Reactive in the effect list) is driven by a spectrum pushed from the PC — there is no microphone on the keyboard, so a PC tool has to run once; USB channel only.
8. Firmware
Work in progress: the firmware is being cleaned up and there is no public download yet. For firmware or usage questions, join the QQ group 677654482 (files are shared there).
For common flashing and remapping issues, see the FAQ.
9. Known limitations
| Item | Status |
|---|---|
| USB wired | ✅ Verified on real hardware (enumeration / typing / VIA / saving) |
| Bluetooth BLE | ⚠ Code complete, not verified on hardware; media keys unusable; no per-slot directed reconnect |
| 2.4G | ⚠ Skeleton; RF transmit and receiver missing |
| Low power / sleep | ❌ Not implemented |
| Battery measurement | ❌ Not implemented (reports a fixed 100% over BLE) |
| Audio reactive | ⚠ Needs a PC tool, not verified on hardware |
| VIA remap | ✅ Works over USB; not over Bluetooth / 2.4G |

评论 / 提问 (填个昵称就能留言,无需注册;邮箱选填,填了能收到回复通知)