Yowkees / keyball

keyball is split keyboard has 100% track ball
GNU General Public License v3.0
484 stars 334 forks source link

Implementing AutoMouseLayer Feature in Keyball Firmware #454

Closed tokuhirom closed 3 months ago

tokuhirom commented 6 months ago

Motivation

https://docs.qmk.fm/#/feature_pointing_device?id=pointing-device-auto-mouse

AutoMouseLayer feature has been implemented in QMK. Keyball has a Pointing Device implemented, making it a perfect match for AutoMouseLayer. The implementation of AutoMouseLayer enables the automatic switching of layers after mouse movement, thus it simplifies the operation of a pointing device with one hand.

Design

In order to integrate the AutoMouseLayer into the firmware, it is necessary to have a mechanism to keep track of the use cases and configurations of the AutoMouseLayer. We will implement three types of custom keycodes:

Details of storing timeout time

For comfortable use of AutoMouseLayer, it becomes necessary to adjust the timeout based on personal preferences. This is because everyone has a unique response speed. If the timeout is too long, one might have to wait for the AutoMouseLayer to end before one can input keys. If it is too short, there might not be enough time to make use of AutoMouseLayer. Based on the QMK documentation, a possible timeout setting range is from 250 msec to 1000 msec. However, we consider that having control with granularity of 50 msec steps from 250 msec to 950 msec should be sufficient. Hence, a formula of "(n-1)*50+250", where 'n' is the number saved in EEPROM, is being used to calculate the actual timeout. This provides a mechanism to store the timeout state in 4 bits. This portion of the design is up for discussion, such as whether to widen the value range, or save bit count by having larger steps than 50 msec.

Firmware Size

Implementing these features will increase firmware size. However, even for Keyball61, it should fit if one LED effect is removed. In this patch, we have disabled RGBLIGHT_EFFECT_KNIGHT.

Placement of AutoMouseLayer

In the current firmware, mouse keys are set on Layer 1. Hence, we are using set_auto_mouse_layer(1) for implementing AutoMouseLayer.

OLED

To display the status of the AutoMouseLayer on the OLED, it might be necessary to free up existing areas. While it is possible to delete any content for displaying this feature, deciding what to remove proved to be rather challenging. Currently, a new method has been defined, for the display of this information. Integration into the current display by removing the Layer display or another existing component, is another possible approach.

koron commented 3 months ago

0.22.3 (QMK version which Keyball using) has problem on auto mouse layer feature and it fixed with 0.22.11

https://github.com/qmk/qmk_firmware/issues/22228 https://github.com/qmk/qmk_firmware/pull/22229

koron commented 3 months ago

I'll update QMK 0.22.14 which is last version 0.22.x. It is expected that no breaking changes.

koron commented 3 months ago

I'm woking in https://github.com/Yowkees/keyball/pull/508

koron commented 3 months ago

merged with #508

CHBrianLiu commented 1 month ago

Hi guys! I am wondering if it's possible to enable the feature whenever it boots? As far as I can tell, this feature is disabled by default. I need to enable it by pressing AML_TO key. If possible, I would like to have it enabled without saving the keyboard settings.