Bump version to 1.7.0 and update README with new features
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
@@ -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: @@ -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 @@ -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. @@ -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"); @@ -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);