Merge remote-tracking branch 'origin/develop' into xap

This commit is contained in:
QMK Bot
2023-07-07 14:27:50 +00:00
5 changed files with 215 additions and 173 deletions
+24 -15
View File
@@ -175,7 +175,7 @@ static uint8_t wheel_unit(void) {
/*
* Kinetic movement acceleration algorithm
*
* current speed = I + A * T/50 + A * 0.5 * T^2 | maximum B
* current speed = I + A * T/50 + A * (T/50)^2 * 1/2 | maximum B
*
* T: time since the mouse movement started
* E: mouse events per second (set through MOUSEKEY_INTERVAL, UHK sends 250, the
@@ -192,37 +192,46 @@ const uint16_t mk_initial_speed = MOUSEKEY_INITIAL_SPEED;
static uint8_t move_unit(void) {
uint16_t speed = mk_initial_speed;
if (mousekey_accel & ((1 << 0) | (1 << 2))) {
speed = mousekey_accel & (1 << 2) ? mk_accelerated_speed : mk_decelerated_speed;
if (mousekey_accel & (1 << 0)) {
speed = mk_decelerated_speed;
} else if (mousekey_accel & (1 << 2)) {
speed = mk_accelerated_speed;
} else if (mousekey_repeat && mouse_timer) {
const uint16_t time_elapsed = timer_elapsed(mouse_timer) / 50;
speed = mk_initial_speed + MOUSEKEY_MOVE_DELTA * time_elapsed + MOUSEKEY_MOVE_DELTA * 0.5 * time_elapsed * time_elapsed;
speed = speed > mk_base_speed ? mk_base_speed : speed;
speed = mk_initial_speed + MOUSEKEY_MOVE_DELTA * time_elapsed + (MOUSEKEY_MOVE_DELTA * time_elapsed * time_elapsed) / 2;
if (speed > mk_base_speed) {
speed = mk_base_speed;
}
}
/* convert speed to USB mouse speed 1 to 127 */
speed = (uint8_t)(speed / (1000U / mk_interval));
speed = speed < 1 ? 1 : speed;
return speed > MOUSEKEY_MOVE_MAX ? MOUSEKEY_MOVE_MAX : speed;
if (speed > MOUSEKEY_MOVE_MAX) {
speed = MOUSEKEY_MOVE_MAX;
} else if (speed < 1) {
speed = 1;
}
return speed;
}
static uint8_t wheel_unit(void) {
uint16_t speed = MOUSEKEY_WHEEL_INITIAL_MOVEMENTS;
if (mousekey_accel & ((1 << 0) | (1 << 2))) {
speed = mousekey_accel & (1 << 2) ? MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS : MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS;
if (mousekey_accel & (1 << 0)) {
speed = MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS;
} else if (mousekey_accel & (1 << 2)) {
speed = MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS;
} else if (mousekey_wheel_repeat && mouse_timer) {
if (mk_wheel_interval != MOUSEKEY_WHEEL_BASE_MOVEMENTS) {
const uint16_t time_elapsed = timer_elapsed(mouse_timer) / 50;
speed = MOUSEKEY_WHEEL_INITIAL_MOVEMENTS + 1 * time_elapsed + 1 * 0.5 * time_elapsed * time_elapsed;
speed = MOUSEKEY_WHEEL_INITIAL_MOVEMENTS + 1 * time_elapsed + (1 * time_elapsed * time_elapsed) / 2;
}
if (speed > MOUSEKEY_WHEEL_BASE_MOVEMENTS) {
speed = MOUSEKEY_WHEEL_BASE_MOVEMENTS;
}
speed = speed > MOUSEKEY_WHEEL_BASE_MOVEMENTS ? MOUSEKEY_WHEEL_BASE_MOVEMENTS : speed;
}
mk_wheel_interval = 1000U / speed;
return (uint8_t)speed > MOUSEKEY_WHEEL_INITIAL_MOVEMENTS ? 2 : 1;
return 1;
}
# endif /* #ifndef MK_KINETIC_SPEED */
+97 -2
View File
@@ -31,7 +31,7 @@
#include "eeprom.h"
#include "version.h" // for QMK_BUILDDATE used in EEPROM magic
#if defined(RGB_MATRIX_ENABLE)
#if (defined(RGB_MATRIX_ENABLE) || defined(LED_MATRIX_ENABLE))
# include <lib/lib8tion/lib8tion.h>
#endif
@@ -141,6 +141,9 @@ __attribute__((weak)) void via_set_device_indication(uint8_t value) {
#if defined(RGB_MATRIX_ENABLE)
rgb_matrix_toggle_noeeprom();
#endif // RGB_MATRIX_ENABLE
#if defined(LED_MATRIX_ENABLE)
led_matrix_toggle_noeeprom();
#endif // LED_MATRIX_ENABLE
#if defined(AUDIO_ENABLE)
if (value == 0) {
wait_ms(10);
@@ -194,6 +197,7 @@ __attribute__((weak)) void via_custom_value_command_kb(uint8_t *data, uint8_t le
// id_qmk_backlight_channel -> via_qmk_backlight_command()
// id_qmk_rgblight_channel -> via_qmk_rgblight_command()
// id_qmk_rgb_matrix_channel -> via_qmk_rgb_matrix_command()
// id_qmk_led_matrix_channel -> via_qmk_led_matrix_command()
// id_qmk_audio_channel -> via_qmk_audio_command()
//
__attribute__((weak)) void via_custom_value_command(uint8_t *data, uint8_t length) {
@@ -219,7 +223,14 @@ __attribute__((weak)) void via_custom_value_command(uint8_t *data, uint8_t lengt
via_qmk_rgb_matrix_command(data, length);
return;
}
#endif // RGBLIGHT_ENABLE
#endif // RGB_MATRIX_ENABLE
#if defined(LED_MATRIX_ENABLE)
if (*channel_id == id_qmk_led_matrix_channel) {
via_qmk_led_matrix_command(data, length);
return;
}
#endif // LED_MATRIX_ENABLE
#if defined(AUDIO_ENABLE)
if (*channel_id == id_qmk_audio_channel) {
@@ -692,6 +703,90 @@ void via_qmk_rgb_matrix_save(void) {
#endif // RGB_MATRIX_ENABLE
#if defined(LED_MATRIX_ENABLE)
# if !defined(LED_MATRIX_MAXIMUM_BRIGHTNESS) || LED_MATRIX_MAXIMUM_BRIGHTNESS > UINT8_MAX
# undef LED_MATRIX_MAXIMUM_BRIGHTNESS
# define LED_MATRIX_MAXIMUM_BRIGHTNESS UINT8_MAX
# endif
void via_qmk_led_matrix_command(uint8_t *data, uint8_t length) {
// data = [ command_id, channel_id, value_id, value_data ]
uint8_t *command_id = &(data[0]);
uint8_t *value_id_and_data = &(data[2]);
switch (*command_id) {
case id_custom_set_value: {
via_qmk_led_matrix_set_value(value_id_and_data);
break;
}
case id_custom_get_value: {
via_qmk_led_matrix_get_value(value_id_and_data);
break;
}
case id_custom_save: {
via_qmk_led_matrix_save();
break;
}
default: {
*command_id = id_unhandled;
break;
}
}
}
void via_qmk_led_matrix_get_value(uint8_t *data) {
// data = [ value_id, value_data ]
uint8_t *value_id = &(data[0]);
uint8_t *value_data = &(data[1]);
switch (*value_id) {
case id_qmk_led_matrix_brightness: {
value_data[0] = ((uint16_t)led_matrix_get_val() * UINT8_MAX) / LED_MATRIX_MAXIMUM_BRIGHTNESS;
break;
}
case id_qmk_led_matrix_effect: {
value_data[0] = led_matrix_is_enabled() ? led_matrix_get_mode() : 0;
break;
}
case id_qmk_led_matrix_effect_speed: {
value_data[0] = led_matrix_get_speed();
break;
}
}
}
void via_qmk_led_matrix_set_value(uint8_t *data) {
// data = [ value_id, value_data ]
uint8_t *value_id = &(data[0]);
uint8_t *value_data = &(data[1]);
switch (*value_id) {
case id_qmk_led_matrix_brightness: {
led_matrix_set_val_noeeprom(scale8(value_data[0], LED_MATRIX_MAXIMUM_BRIGHTNESS));
break;
}
case id_qmk_led_matrix_effect: {
if (value_data[0] == 0) {
led_matrix_disable_noeeprom();
} else {
led_matrix_enable_noeeprom();
led_matrix_mode_noeeprom(value_data[0]);
}
break;
}
case id_qmk_led_matrix_effect_speed: {
led_matrix_set_speed_noeeprom(value_data[0]);
break;
}
}
}
void via_qmk_led_matrix_save(void) {
eeconfig_update_led_matrix();
}
#endif // LED_MATRIX_ENABLE
#if defined(AUDIO_ENABLE)
extern audio_config_t audio_config;
+14
View File
@@ -109,6 +109,7 @@ enum via_channel_id {
id_qmk_rgblight_channel = 2,
id_qmk_rgb_matrix_channel = 3,
id_qmk_audio_channel = 4,
id_qmk_led_matrix_channel = 5,
};
enum via_qmk_backlight_value {
@@ -130,6 +131,12 @@ enum via_qmk_rgb_matrix_value {
id_qmk_rgb_matrix_color = 4,
};
enum via_qmk_led_matrix_value {
id_qmk_led_matrix_brightness = 1,
id_qmk_led_matrix_effect = 2,
id_qmk_led_matrix_effect_speed = 3,
};
enum via_qmk_audio_value {
id_qmk_audio_enable = 1,
id_qmk_audio_clicky_enable = 2,
@@ -182,6 +189,13 @@ void via_qmk_rgb_matrix_get_value(uint8_t *data);
void via_qmk_rgb_matrix_save(void);
#endif
#if defined(LED_MATRIX_ENABLE)
void via_qmk_led_matrix_command(uint8_t *data, uint8_t length);
void via_qmk_led_matrix_set_value(uint8_t *data);
void via_qmk_led_matrix_get_value(uint8_t *data);
void via_qmk_led_matrix_save(void);
#endif
#if defined(AUDIO_ENABLE)
void via_qmk_audio_command(uint8_t *data, uint8_t length);
void via_qmk_audio_set_value(uint8_t *data);