← KD100

Bump version to 1.7.0 and update README with new features

ca35c7edd73f9cdab57a5137df11252913199e86 · Claude · Feb 7, 2026 12:16

Version 1.7.0 - Enhanced OSD Feedback & Wheel Descriptions:
- Update all version strings across Makefile, main.c, device.c, default.cfg
- Add v1.7.0 feature list to README (wheel descriptions, button highlighting,
  leader feedback, set indicators, action aggregation, input validation)
- Add wheel function descriptions documentation with config examples
- Update OSD features section with new capabilities
- Add v1.7.0 version history entry
- Update Makefile help target with new feature summary

https://claude.ai/code/session_019MPUMMqDBcEYr7qFBLzJd6

+89 −44 · 5 files changed

  • Makefile +5 −4
  • README.md +69 −17
  • default.cfg +1 −1
  • src/device.c +2 −2
  • src/main.c +12 −20
diff --git a/Makefile b/Makefile
index 34a730b..2c8d590 100644
--- a/Makefile
+++ b/Makefile
@@ -7,7 +7,7 @@ DIR = $(shell pwd)
 HOME = "/home/"$(shell logname)
 TARGET = KD100
 DEBUG_TARGET = KD100-debug
-VERSION = 1.6.0
+VERSION = 1.7.0
 
 # Source files
 SRC_DIR = src
@@ -149,9 +149,10 @@ help:
 	@echo "  make help         - Show this help"
 	@echo ""
 	@echo "New in v$(VERSION):"
-	@echo "  - On-screen display (OSD) for key actions"
-	@echo "  - Profile system with window title matching"
-	@echo "  - Requires: libx11-dev libxrender-dev libxext-dev"
+	@echo "  - Wheel function descriptions (wheel_description_N config fields)"
+	@echo "  - Active button highlighting and leader key visual feedback"
+	@echo "  - Wheel set indicator with active set highlight"
+	@echo "  - Wheel action aggregation and mode/leader status display"
 
 # Version info
 version:
diff --git a/README.md b/README.md
index 1e14026..acba47d 100644
--- a/README.md
+++ b/README.md
@@ -6,11 +6,18 @@ Originally forked from [mckset/KD100](https://github.com/mckset/KD100), now inde
 
 A simple driver for the Huion KD100 mini Keydial written in C to give the device some usability while waiting for Huion to fix their Linux drivers. Each button can be configured to either act as a key/multiple keys or to execute a program/command.
 
-**Version 1.6.0** adds an on-screen display (OSD) overlay showing key actions and keyboard layout, with profile support for automatic configuration switching based on active window.
+**Version 1.7.0** enhances the OSD with active button highlighting, wheel function descriptions, wheel set indicators, leader key visual feedback, and action aggregation for wheel events.
 
 > **NOTICE:** When updating from **v1.31** or below, make sure you updated your config file to follow the new format shown in the default config file.
 
 ## Features
+- **Wheel Function Descriptions (v1.7.0)**: Human-readable names for wheel functions shown in OSD
+- **Active Button Highlighting (v1.7.0)**: Pressed buttons flash green in expanded keyboard layout
+- **Leader Key Visual Feedback (v1.7.0)**: Orange highlight for active leader, purple tint for eligible keys
+- **Wheel Set Indicator (v1.7.0)**: Numbered set boxes with green active highlight next to mode display
+- **Wheel Action Aggregation (v1.7.0)**: Repeated wheel turns show as single action, not per-tick
+- **Mode & Leader Status Display (v1.7.0)**: Mode, leader, and set info shown at top of both OSD views
+- **Input Validation (v1.7.0)**: Description fields sanitized (max 64 chars, printable ASCII only)
 - **On-Screen Display (v1.6.0)**: Semi-transparent overlay showing recent key actions and full keyboard layout
 - **Profile System (v1.6.0)**: Automatic configuration switching based on active window title
 - **Scalable UI (v1.6.0)**: Font size setting scales entire OSD proportionally
@@ -26,7 +33,7 @@ A simple driver for the Huion KD100 mini Keydial written in C to give the device
 - **Clean Compilation**: Zero warnings with strict compiler flags
 - **Better Code Organization**: Easy to extend and maintain
 
-## Architecture (v1.6.0)
+## Architecture (v1.7.0)
 
 The codebase is organized into focused modules:
 
@@ -168,8 +175,13 @@ leader_eligible: false    # Typically not eligible
 Version 1.6.0 introduces a semi-transparent on-screen display overlay, similar to Blender's screencast keys feature. The OSD shows recent key actions and can expand to show the full keyboard layout.
 
 ### Features
-- **Minimal Mode**: Shows recent key actions (e.g., "B0 - Brush (b)")
-- **Expanded Mode**: Shows full keyboard layout with key descriptions
+- **Minimal Mode**: Shows mode/set info, active wheel function pair, and 3 recent actions
+- **Expanded Mode**: Full keyboard layout with button highlighting, wheel set indicator, and 3 recent actions
+- **Active Button Highlighting**: Pressed buttons flash green in the keyboard layout
+- **Leader Key Feedback**: Leader button glows orange when active; eligible keys tinted purple
+- **Wheel Set Indicator**: Numbered boxes `[1][2][3]` next to mode, green = active set (grayed in sequential mode)
+- **Wheel Function Display**: Shows both functions in current set with `>` on the active one
+- **Wheel Action Aggregation**: Repeated wheel turns displayed as a single action
 - **Auto-Show/Hide**: Appears when keys are pressed, hides after timeout
 - **Hover Detection**: Stays visible while cursor hovers over it
 - **Draggable**: Click and drag anywhere on the window to move it
@@ -315,21 +327,46 @@ wheel_click_timeout: 300
 
 # Clockwise wheel functions
 Wheel
-function: bracketright        # Set 1, function 0 - Brush size increase
-function: o                   # Set 1, function 1 - Opacity increase
-function: shift+bracketright  # Set 2, function 2 - Flow increase
-function: ctrl+bracketright   # Set 2, function 3 - Rotation clockwise
-function: alt+bracketright    # Set 3, function 4 - Scatter increase
-function: super+bracketright  # Set 3, function 5 - Spacing increase
+function: bracketright
+function: o
+function: shift+bracketright
+function: ctrl+bracketright
+function: alt+bracketright
+function: super+bracketright
 
 # Counter-clockwise wheel functions
 Wheel
-function: bracketleft         # Set 1, function 0 - Brush size decrease
-function: i                   # Set 1, function 1 - Opacity decrease
-function: shift+bracketleft   # Set 2, function 2 - Flow decrease
-function: ctrl+bracketleft    # Set 2, function 3 - Rotation counter-clockwise
-function: alt+bracketleft     # Set 3, function 4 - Scatter decrease
-function: super+bracketleft   # Set 3, function 5 - Spacing decrease
+function: bracketleft
+function: i
+function: shift+bracketleft
+function: ctrl+bracketleft
+function: alt+bracketleft
+function: super+bracketleft
+
+# Wheel function descriptions (shown in OSD)
+wheel_description_0: Brush Size
+wheel_description_1: Opacity
+wheel_description_2: Flow
+wheel_description_3: Rotation
+wheel_description_4: Scatter
+wheel_description_5: Spacing
+```
+
+### Wheel Function Descriptions (v1.7.0)
+Each wheel function index can have a human-readable description shown in the OSD. Descriptions are displayed in the wheel set indicator, the function pair line, and in action messages.
+
+```bash
+# Format: wheel_description_<index>: <description>
+# Maximum 64 characters, printable ASCII only
+wheel_description_0: Brush Size
+wheel_description_1: Opacity
+```
+
+The OSD displays the current set's function pair with an active indicator:
+```
+Mode: Sets  [1][2][3]
+Leader: OFF
+Set 1:  > Brush Size  |    Opacity
 ```
 
 **Workflow Example:**
@@ -449,7 +486,22 @@ If you encounter permission errors or device conflicts:
 
 ## Version History
 
-### v1.6.0 (Current) - On-Screen Display & Profiles
+### v1.7.0 (Current) - Enhanced OSD Feedback & Wheel Descriptions
+- **Wheel Function Descriptions**: New `wheel_description_N` config fields for human-readable names
+  - Shown in OSD set indicator, function pair display, and action messages
+  - Replaces inline comments after wheel function lines in config
+- **Active Button Highlighting**: Pressed buttons flash green for 500ms in expanded view
+- **Leader Key Visual Feedback**: Orange highlight on active leader button, purple tint on eligible keys
+- **Wheel Set Indicator**: Numbered `[1][2][3]` boxes next to mode line, green = active set
+  - Grayed out in sequential mode (visible but inactive)
+- **Wheel Action Aggregation**: Repeated wheel turns coalesced into single display message
+- **Mode & Leader Display**: Dedicated lines for mode+sets and leader state in both views
+  - Leader status on its own row to prevent set boxes being pushed off-screen
+- **3-Command History**: Recent actions shown in both minimal and expanded views
+- **Input Validation**: `sanitize_description()` enforces max 64 chars, printable ASCII only
+- **Layout Improvements**: Wheel info moved to top of both views; consistent shared rendering
+
+### v1.6.0 - On-Screen Display & Profiles
 - **On-Screen Display**: Semi-transparent overlay showing key actions
   - Minimal mode: Recent actions with key descriptions
   - Expanded mode: Full keyboard layout view
diff --git a/default.cfg b/default.cfg
index 9bf8d20..555d94b 100644
--- a/default.cfg
+++ b/default.cfg
@@ -1,4 +1,4 @@
-// KD100 config file - Version 1.6.0
+// KD100 config file - Version 1.7.0
 //
 //      Assumptions:
 //              - (B)utton defines a new button and the following number specifies which button it is.
diff --git a/src/device.c b/src/device.c
index 453527d..043df36 100644
--- a/src/device.c
+++ b/src/device.c
@@ -40,7 +40,7 @@ void device_run(libusb_context* ctx, config_t* config, int debug, int accept, in
     if (debug > 0) {
         if (debug > 2)
             debug = 2;
-        printf("Version 1.6.0 - OSD & Profile System\n");
+        printf("Version 1.7.0 - Enhanced OSD Feedback & Wheel Descriptions\n");
         printf("Debug level: %d\n", debug);
     }
 
@@ -355,7 +355,7 @@ void device_run(libusb_context* ctx, config_t* config, int debug, int accept, in
                 }
 
                 printf("Driver is running!\n");
-                printf("Enhanced Leader Key System v1.6.0\n");
+                printf("Enhanced Leader Key System v1.7.0\n");
                 printf("Mode: %s | Timeout: %d ms\n",
                        leader_mode_to_string(config->leader.mode), config->leader.timeout_ms);
                 printf("Wheel Mode: %s", config->wheel_mode == WHEEL_MODE_SEQUENTIAL ? "sequential" : "sets");
diff --git a/src/main.c b/src/main.c
index 41895a0..1e312f1 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,5 +1,5 @@
 /*
-	V1.6.0 - OSD & Profile System
+	V1.7.0 - Enhanced OSD Feedback & Wheel Descriptions
 	https://github.com/mckset/KD100.git
 	KD100 Linux driver for X11 desktops
 	Features:
@@ -169,23 +169,15 @@ int main(int args, char *in[]) {
             printf("\t-d [-d]\t\tEnable debug outputs (use twice to view data sent by the device)\n");
             printf("\t-dry \t\tDisplay data sent by the device without sending events\n");
             printf("\t-h\t\tDisplays this message\n");
-            printf("\nNew in v1.6.0 - OSD & PROFILE SYSTEM:\n");
-            printf("\t• On-Screen Display (OSD) for key actions\n");
-            printf("\t  - Semi-transparent overlay (configurable opacity)\n");
-            printf("\t  - Collapsible: minimal mode (recent actions) / expanded (full layout)\n");
-            printf("\t  - Draggable by title bar\n");
-            printf("\t  - Shows what each key does in expanded mode\n");
-            printf("\t• Profile System with window title matching\n");
-            printf("\t  - Automatic profile switching based on active window\n");
-            printf("\t  - Wildcard patterns: krita*, *photoshop*, gimp*\n");
-            printf("\t  - Case-insensitive matching\n");
-            printf("\t  - Per-profile key descriptions\n");
-            printf("\t• Example OSD config in default.cfg:\n");
-            printf("\t  osd_enabled: true\n");
-            printf("\t  osd_opacity: 0.67\n");
-            printf("\t  osd_position: 50,50\n");
-            printf("\t  profiles_file: profiles.cfg\n");
-            printf("\t  profile_auto_switch: true\n");
+            printf("\nNew in v1.7.0 - ENHANCED OSD FEEDBACK:\n");
+            printf("\t• Wheel function descriptions (wheel_description_N: name)\n");
+            printf("\t• Active button highlighting in expanded keyboard layout\n");
+            printf("\t• Leader key visual feedback (orange/purple indicators)\n");
+            printf("\t• Wheel set indicator with active set highlight\n");
+            printf("\t• Wheel action aggregation (no repeated messages on turn)\n");
+            printf("\t• Mode and leader status display in both OSD views\n");
+            printf("\t• 3-command history in both minimal and expanded views\n");
+            printf("\t• Input validation for description fields (max 64 chars)\n");
             printf("\nConfiguration:\n");
             printf("\tAdd 'enable_uclogic: true' to config to work with hid_uclogic loaded\n");
             printf("\tDefault: enable_uclogic: false (compatible with OpenTabletDriver)\n\n");
@@ -257,8 +249,8 @@ int main(int args, char *in[]) {
         }
     }
 
-    printf("\nKD100 Driver v1.6.0 - OSD & Profile System\n");
-    printf("Features: OSD overlay | Profile switching | Configurable modes\n\n");
+    printf("\nKD100 Driver v1.7.0 - Enhanced OSD Feedback & Wheel Descriptions\n");
+    printf("Features: OSD overlay | Profile switching | Wheel descriptions | Button highlighting\n\n");
 
     // Run device handler
     device_run(ctx, config, debug, accept, dry);