* Add digitizer HID interface for setting the mouse cursor position at absolute screen coordinates. Tested on Pro Micro, Proton C and Blackpill. * Update docs/feature_digitizer.md Co-authored-by: Ryan <fauxpark@gmail.com> * Update tmk_core/protocol/usb_descriptor.c Co-authored-by: Ryan <fauxpark@gmail.com> * Add missing copyrights Add V-USB support * Add support for digitizer dedicated endpoint for lufa and chibios. Fix formatting issues Move digitizer_task definition to the feature's base implementation file * Run cformat on modified files * Change digitizer report usage to Digitizer instead of Pen to avoid pointer disappearing on Windows. * Update tmk_core/protocol/vusb/vusb.c Co-authored-by: Ryan <fauxpark@gmail.com> * Run cformat from docker image * Remove send_digitizer from host_driver_t and instead rely on the declaration being the interface to the implementation in each HW-specific usb implementation. * Fix build : send_digitizer shouldn't be static in vusb and add weak-linkage implementation for tests without usb implementation * Change digitizer user interface to match pointing device's * Update documentation with new API Co-authored-by: a-chol <nothing@none.com> Co-authored-by: Ryan <fauxpark@gmail.com>
1.4 KiB
Digitizer
The digitizer HID interface allows setting the mouse cursor position at absolute coordinates, unlike the Pointing Device feature that applies relative displacements.
To enable the digitizer interface, add the following line to your rules.mk:
DIGITIZER_ENABLE = yesIn order to change the mouse cursor position from your keymap.c file, include the digitizer header :
#include "digitizer.h"This gives you access to the digitizer structure which
members allow you to change the cursor position.
The coordinates are normalized, meaning there value must be set
between 0 and 1. For the x coordinate, the value
0 is the leftmost position, whereas the value
1 is the rightmost position. For the y
coordinate, 0 is at the top and 1 at the
bottom.
Here is an example setting the cursor in the middle of the screen:
digitizer_t digitizer;
digitizer.x = 0.5;
digitizer.y = 0.5;
digitizer.tipswitch = 0;
digitizer.inrange = 1;
digitizer_set_report(digitizer);The tipswitch member triggers what equates to a click
when set to 1. The inrange member is required
for the change in coordinates to be taken. It can then be set to
0 in a new report to signal the end of the digitizer
interaction, but it is not strictly required.
Once all members are set to the desired value, the
status member needs its bitmask DZ_UPDATED to
be set so the report is sent during the next main loop iteration.