diff options
author | just-another-jxliu <just-another-jxliu@users.noreply.github.com> | 2021-10-29 13:11:48 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-29 13:11:48 -0700 |
commit | 736d9fa5384977159abf55b72251c93a5dba8356 (patch) | |
tree | 2b2a75dd512cffcd8c7d74da95777c7c120cabf0 /tmk_core | |
parent | 55fb468d7453eb31bc1793772938e2d28881fcaa (diff) | |
download | qmk_firmware-736d9fa5384977159abf55b72251c93a5dba8356.tar.gz qmk_firmware-736d9fa5384977159abf55b72251c93a5dba8356.zip |
Stop-gap forward-port Drop LED features for CTRL and ALT (#14967)
Diffstat (limited to 'tmk_core')
-rw-r--r-- | tmk_core/protocol/arm_atsam/md_rgb_matrix.c | 48 | ||||
-rw-r--r-- | tmk_core/protocol/arm_atsam/md_rgb_matrix.h | 21 |
2 files changed, 65 insertions, 4 deletions
diff --git a/tmk_core/protocol/arm_atsam/md_rgb_matrix.c b/tmk_core/protocol/arm_atsam/md_rgb_matrix.c index 98967aac8..43d9f2ee6 100644 --- a/tmk_core/protocol/arm_atsam/md_rgb_matrix.c +++ b/tmk_core/protocol/arm_atsam/md_rgb_matrix.c | |||
@@ -341,6 +341,10 @@ uint8_t led_lighting_mode = LED_MODE_NORMAL; | |||
341 | uint8_t led_enabled = 1; | 341 | uint8_t led_enabled = 1; |
342 | uint8_t led_animation_breathe_cur = BREATHE_MIN_STEP; | 342 | uint8_t led_animation_breathe_cur = BREATHE_MIN_STEP; |
343 | uint8_t breathe_dir = 1; | 343 | uint8_t breathe_dir = 1; |
344 | uint8_t led_animation_circular = 0; | ||
345 | float led_edge_brightness = 1.0f; | ||
346 | float led_ratio_brightness = 1.0f; | ||
347 | uint8_t led_edge_mode = LED_EDGE_MODE_ALL; | ||
344 | 348 | ||
345 | static void led_run_pattern(led_setup_t* f, float* ro, float* go, float* bo, float pos) { | 349 | static void led_run_pattern(led_setup_t* f, float* ro, float* go, float* bo, float pos) { |
346 | float po; | 350 | float po; |
@@ -398,16 +402,32 @@ static void led_run_pattern(led_setup_t* f, float* ro, float* go, float* bo, flo | |||
398 | } | 402 | } |
399 | } | 403 | } |
400 | 404 | ||
405 | # define RGB_MAX_DISTANCE 232.9635f | ||
406 | |||
401 | static void md_rgb_matrix_config_override(int i) { | 407 | static void md_rgb_matrix_config_override(int i) { |
402 | float ro = 0; | 408 | float ro = 0; |
403 | float go = 0; | 409 | float go = 0; |
404 | float bo = 0; | 410 | float bo = 0; |
405 | 411 | float po; | |
406 | float po = (led_animation_orientation) ? (float)g_led_config.point[i].y / 64.f * 100 : (float)g_led_config.point[i].x / 224.f * 100; | ||
407 | 412 | ||
408 | uint8_t highest_active_layer = biton32(layer_state); | 413 | uint8_t highest_active_layer = biton32(layer_state); |
409 | 414 | ||
410 | if (led_lighting_mode == LED_MODE_KEYS_ONLY && HAS_FLAGS(g_led_config.flags[i], LED_FLAG_UNDERGLOW)) { | 415 | if (led_animation_circular) { |
416 | // TODO: should use min/max values from LED configuration instead of | ||
417 | // hard-coded 224, 64 | ||
418 | // po = sqrtf((powf(fabsf((disp.width / 2) - (led_cur->x - disp.left)), 2) + powf(fabsf((disp.height / 2) - (led_cur->y - disp.bottom)), 2))) / disp.max_distance * 100; | ||
419 | po = sqrtf((powf(fabsf((224 / 2) - (float)g_led_config.point[i].x), 2) + powf(fabsf((64 / 2) - (float)g_led_config.point[i].y), 2))) / RGB_MAX_DISTANCE * 100; | ||
420 | } else { | ||
421 | if (led_animation_orientation) { | ||
422 | po = (float)g_led_config.point[i].y / 64.f * 100; | ||
423 | } else { | ||
424 | po = (float)g_led_config.point[i].x / 224.f * 100; | ||
425 | } | ||
426 | } | ||
427 | |||
428 | if (led_edge_mode == LED_EDGE_MODE_ALTERNATE && LED_IS_EDGE_ALT(led_map[i].scan)) { | ||
429 | // Do not act on this LED (Edge alternate lighting mode) | ||
430 | } else if (led_lighting_mode == LED_MODE_KEYS_ONLY && HAS_FLAGS(g_led_config.flags[i], LED_FLAG_UNDERGLOW)) { | ||
411 | // Do not act on this LED | 431 | // Do not act on this LED |
412 | } else if (led_lighting_mode == LED_MODE_NON_KEYS_ONLY && !HAS_FLAGS(g_led_config.flags[i], LED_FLAG_UNDERGLOW)) { | 432 | } else if (led_lighting_mode == LED_MODE_NON_KEYS_ONLY && !HAS_FLAGS(g_led_config.flags[i], LED_FLAG_UNDERGLOW)) { |
413 | // Do not act on this LED | 433 | // Do not act on this LED |
@@ -465,10 +485,30 @@ static void md_rgb_matrix_config_override(int i) { | |||
465 | } | 485 | } |
466 | } | 486 | } |
467 | 487 | ||
488 | // Adjust edge LED brightness | ||
489 | if (led_edge_brightness != 1 && LED_IS_EDGE(led_map[i].scan)) { | ||
490 | ro *= led_edge_brightness; | ||
491 | go *= led_edge_brightness; | ||
492 | bo *= led_edge_brightness; | ||
493 | } | ||
494 | |||
495 | // Adjust ratio of key vs. underglow (edge) LED brightness | ||
496 | if (LED_IS_EDGE(led_map[i].scan) && led_ratio_brightness > 1.0) { | ||
497 | // Decrease edge (underglow) LEDs | ||
498 | ro *= (2.0 - led_ratio_brightness); | ||
499 | go *= (2.0 - led_ratio_brightness); | ||
500 | bo *= (2.0 - led_ratio_brightness); | ||
501 | } else if (LED_IS_KEY(led_map[i].scan) && led_ratio_brightness < 1.0) { | ||
502 | // Decrease KEY LEDs | ||
503 | ro *= led_ratio_brightness; | ||
504 | go *= led_ratio_brightness; | ||
505 | bo *= led_ratio_brightness; | ||
506 | } | ||
507 | |||
468 | led_buffer[i].r = (uint8_t)ro; | 508 | led_buffer[i].r = (uint8_t)ro; |
469 | led_buffer[i].g = (uint8_t)go; | 509 | led_buffer[i].g = (uint8_t)go; |
470 | led_buffer[i].b = (uint8_t)bo; | 510 | led_buffer[i].b = (uint8_t)bo; |
471 | } | 511 | } |
472 | 512 | ||
473 | # endif // USE_MASSDROP_CONFIGURATOR | 513 | # endif // USE_MASSDROP_CONFIGURATOR |
474 | #endif // RGB_MATRIX_ENABLE \ No newline at end of file | 514 | #endif // RGB_MATRIX_ENABLE |
diff --git a/tmk_core/protocol/arm_atsam/md_rgb_matrix.h b/tmk_core/protocol/arm_atsam/md_rgb_matrix.h index 76ccaa678..f72dca298 100644 --- a/tmk_core/protocol/arm_atsam/md_rgb_matrix.h +++ b/tmk_core/protocol/arm_atsam/md_rgb_matrix.h | |||
@@ -128,6 +128,8 @@ typedef struct led_instruction_s { | |||
128 | uint32_t id1; // Bitwise id, IDs 32-63 | 128 | uint32_t id1; // Bitwise id, IDs 32-63 |
129 | uint32_t id2; // Bitwise id, IDs 64-95 | 129 | uint32_t id2; // Bitwise id, IDs 64-95 |
130 | uint32_t id3; // Bitwise id, IDs 96-127 | 130 | uint32_t id3; // Bitwise id, IDs 96-127 |
131 | uint32_t id4; // Bitwise id, IDs 128-159 | ||
132 | uint32_t id5; // Bitwise id, IDs 160-191 | ||
131 | uint8_t layer; | 133 | uint8_t layer; |
132 | uint8_t r; | 134 | uint8_t r; |
133 | uint8_t g; | 135 | uint8_t g; |
@@ -146,6 +148,11 @@ extern uint8_t led_enabled; | |||
146 | extern uint8_t led_animation_breathe_cur; | 148 | extern uint8_t led_animation_breathe_cur; |
147 | extern uint8_t led_animation_direction; | 149 | extern uint8_t led_animation_direction; |
148 | extern uint8_t breathe_dir; | 150 | extern uint8_t breathe_dir; |
151 | extern uint8_t led_animation_orientation; | ||
152 | extern uint8_t led_animation_circular; | ||
153 | extern float led_edge_brightness; | ||
154 | extern float led_ratio_brightness; | ||
155 | extern uint8_t led_edge_mode; | ||
149 | 156 | ||
150 | # define LED_MODE_NORMAL 0 // Must be 0 | 157 | # define LED_MODE_NORMAL 0 // Must be 0 |
151 | # define LED_MODE_KEYS_ONLY 1 | 158 | # define LED_MODE_KEYS_ONLY 1 |
@@ -153,6 +160,20 @@ extern uint8_t breathe_dir; | |||
153 | # define LED_MODE_INDICATORS_ONLY 3 | 160 | # define LED_MODE_INDICATORS_ONLY 3 |
154 | # define LED_MODE_MAX_INDEX LED_MODE_INDICATORS_ONLY // Must be highest value | 161 | # define LED_MODE_MAX_INDEX LED_MODE_INDICATORS_ONLY // Must be highest value |
155 | 162 | ||
163 | # define LED_EDGE_MODE_ALL 0 // All edge LEDs are active (Must be 0) | ||
164 | # define LED_EDGE_MODE_ALTERNATE 1 // Alternate mode of edge LEDs are active (Intention is for 'only every other edge LED' to be active) | ||
165 | # define LED_EDGE_MODE_MAX LED_EDGE_MODE_ALTERNATE // Must be the highest valued LED edge mode | ||
166 | |||
167 | # define LED_EDGE_FULL_MODE 255 // LEDs configured with this scan code will always be on for edge lighting modes | ||
168 | # define LED_EDGE_ALT_MODE 254 // LEDs configured with this scan code will turn off in edge alternating mode | ||
169 | # define LED_EDGE_MIN_SCAN 254 // LEDs configured with scan code >= to this are assigned as edge LEDs | ||
170 | # define LED_INDICATOR_SCAN 253 // LEDs configured as dedicated indicators | ||
171 | |||
172 | # define LED_IS_KEY(scan) (scan < LED_INDICATOR_SCAN) // Return true if an LED's scan value indicates it is a key LED | ||
173 | # define LED_IS_EDGE(scan) (scan >= LED_EDGE_MIN_SCAN) // Return true if an LED's scan value indicates an edge LED | ||
174 | # define LED_IS_EDGE_ALT(scan) (scan == LED_EDGE_ALT_MODE) // Return true if an LED's scan value indicates an alternate edge mode LED | ||
175 | # define LED_IS_INDICATOR(scan) (scan == LED_INDICATOR_SCAN) // Return true if an LED's scan value indicates it is a dedicated Indicator | ||
176 | |||
156 | #endif // USE_MASSDROP_CONFIGURATOR | 177 | #endif // USE_MASSDROP_CONFIGURATOR |
157 | 178 | ||
158 | #endif //_LED_MATRIX_H_ | 179 | #endif //_LED_MATRIX_H_ |