aboutsummaryrefslogtreecommitdiff
path: root/quantum/via.c
diff options
context:
space:
mode:
authorWilba <Jason.S.Williams@gmail.com>2020-01-21 05:18:25 +1100
committerMechMerlin <30334081+mechmerlin@users.noreply.github.com>2020-01-20 10:18:25 -0800
commit484a9b12bc3961fc0dd9481d3cb734959db42191 (patch)
treeca2e4219b6514c1033be3ab3a975bd24f723f2ba /quantum/via.c
parentce81c4f89b61560ee35436b351b27fd23568c32f (diff)
downloadqmk_firmware-484a9b12bc3961fc0dd9481d3cb734959db42191.tar.gz
qmk_firmware-484a9b12bc3961fc0dd9481d3cb734959db42191.zip
Add VIA support for QMK backlight, QMK RGBLight (#7911)
* Add VIA support for QMK backlight, QMK RGBLight * clang-format changes
Diffstat (limited to 'quantum/via.c')
-rw-r--r--quantum/via.c182
1 files changed, 179 insertions, 3 deletions
diff --git a/quantum/via.c b/quantum/via.c
index b3934d9f0..f85af8d9e 100644
--- a/quantum/via.c
+++ b/quantum/via.c
@@ -22,14 +22,42 @@
22# error "DYNAMIC_KEYMAP_ENABLE is not enabled" 22# error "DYNAMIC_KEYMAP_ENABLE is not enabled"
23#endif 23#endif
24 24
25// If VIA_CUSTOM_LIGHTING_ENABLE is not defined, then VIA_QMK_BACKLIGHT_ENABLE is set
26// if BACKLIGHT_ENABLE is set, so handling of QMK Backlight values happens here by default.
27// if VIA_CUSTOM_LIGHTING_ENABLE is defined, then VIA_QMK_BACKLIGHT_ENABLE must be explicitly
28// set in keyboard-level config.h, so handling of QMK Backlight values happens here
29#if defined(BACKLIGHT_ENABLE) && !defined(VIA_CUSTOM_LIGHTING_ENABLE)
30# define VIA_QMK_BACKLIGHT_ENABLE
31#endif
32
33// If VIA_CUSTOM_LIGHTING_ENABLE is not defined, then VIA_QMK_RGBLIGHT_ENABLE is set
34// if RGBLIGHT_ENABLE is set, so handling of QMK RGBLIGHT values happens here by default.
35// If VIA_CUSTOM_LIGHTING_ENABLE is defined, then VIA_QMK_RGBLIGHT_ENABLE must be explicitly
36// set in keyboard-level config.h, so handling of QMK RGBLIGHT values happens here
37#if defined(RGBLIGHT_ENABLE) && !defined(VIA_CUSTOM_LIGHTING_ENABLE)
38# define VIA_QMK_RGBLIGHT_ENABLE
39#endif
40
25#include "quantum.h" 41#include "quantum.h"
26 42
27#include "via.h" 43#include "via.h"
44
28#include "raw_hid.h" 45#include "raw_hid.h"
29#include "dynamic_keymap.h" 46#include "dynamic_keymap.h"
30#include "tmk_core/common/eeprom.h" 47#include "tmk_core/common/eeprom.h"
31#include "version.h" // for QMK_BUILDDATE used in EEPROM magic 48#include "version.h" // for QMK_BUILDDATE used in EEPROM magic
32 49
50// Forward declare some helpers.
51#if defined(VIA_QMK_BACKLIGHT_ENABLE)
52void via_qmk_backlight_set_value(uint8_t *data);
53void via_qmk_backlight_get_value(uint8_t *data);
54#endif
55
56#if defined(VIA_QMK_RGBLIGHT_ENABLE)
57void via_qmk_rgblight_set_value(uint8_t *data);
58void via_qmk_rgblight_get_value(uint8_t *data);
59#endif
60
33// Can be called in an overriding via_init_kb() to test if keyboard level code usage of 61// Can be called in an overriding via_init_kb() to test if keyboard level code usage of
34// EEPROM is invalid and use/save defaults. 62// EEPROM is invalid and use/save defaults.
35bool via_eeprom_is_valid(void) { 63bool via_eeprom_is_valid(void) {
@@ -282,10 +310,52 @@ void raw_hid_receive(uint8_t *data, uint8_t length) {
282 dynamic_keymap_reset(); 310 dynamic_keymap_reset();
283 break; 311 break;
284 } 312 }
285 case id_backlight_config_set_value: 313 case id_lighting_set_value: {
286 case id_backlight_config_get_value: 314#if defined(VIA_QMK_BACKLIGHT_ENABLE)
287 case id_backlight_config_save: { 315 via_qmk_backlight_set_value(command_data);
316#endif
317#if defined(VIA_QMK_RGBLIGHT_ENABLE)
318 via_qmk_rgblight_set_value(command_data);
319#endif
320#if defined(VIA_CUSTOM_LIGHTING_ENABLE)
288 raw_hid_receive_kb(data, length); 321 raw_hid_receive_kb(data, length);
322#endif
323#if !defined(VIA_QMK_BACKLIGHT_ENABLE) && !defined(VIA_QMK_RGBLIGHT_ENABLE) && !defined(VIA_CUSTOM_LIGHTING_ENABLE)
324 // Return the unhandled state
325 *command_id = id_unhandled;
326#endif
327 break;
328 }
329 case id_lighting_get_value: {
330#if defined(VIA_QMK_BACKLIGHT_ENABLE)
331 via_qmk_backlight_get_value(command_data);
332#endif
333#if defined(VIA_QMK_RGBLIGHT_ENABLE)
334 via_qmk_rgblight_get_value(command_data);
335#endif
336#if defined(VIA_CUSTOM_LIGHTING_ENABLE)
337 raw_hid_receive_kb(data, length);
338#endif
339#if !defined(VIA_QMK_BACKLIGHT_ENABLE) && !defined(VIA_QMK_RGBLIGHT_ENABLE) && !defined(VIA_CUSTOM_LIGHTING_ENABLE)
340 // Return the unhandled state
341 *command_id = id_unhandled;
342#endif
343 break;
344 }
345 case id_lighting_save: {
346#if defined(VIA_QMK_BACKLIGHT_ENABLE)
347 eeconfig_update_backlight_current();
348#endif
349#if defined(VIA_QMK_RGBLIGHT_ENABLE)
350 eeconfig_update_rgblight_current();
351#endif
352#if defined(VIA_CUSTOM_LIGHTING_ENABLE)
353 raw_hid_receive_kb(data, length);
354#endif
355#if !defined(VIA_QMK_BACKLIGHT_ENABLE) && !defined(VIA_QMK_RGBLIGHT_ENABLE) && !defined(VIA_CUSTOM_LIGHTING_ENABLE)
356 // Return the unhandled state
357 *command_id = id_unhandled;
358#endif
289 break; 359 break;
290 } 360 }
291 case id_dynamic_keymap_macro_get_count: { 361 case id_dynamic_keymap_macro_get_count: {
@@ -355,3 +425,109 @@ void raw_hid_receive(uint8_t *data, uint8_t length) {
355 // (i.e. returning state to the host, or the unhandled state). 425 // (i.e. returning state to the host, or the unhandled state).
356 raw_hid_send(data, length); 426 raw_hid_send(data, length);
357} 427}
428
429#if defined(VIA_QMK_BACKLIGHT_ENABLE)
430
431# if BACKLIGHT_LEVELS == 0
432# error BACKLIGHT_LEVELS == 0
433# endif
434
435void via_qmk_backlight_get_value(uint8_t *data) {
436 uint8_t *value_id = &(data[0]);
437 uint8_t *value_data = &(data[1]);
438 switch (*value_id) {
439 case id_qmk_backlight_brightness: {
440 // level / BACKLIGHT_LEVELS * 255
441 value_data[0] = ((uint16_t)get_backlight_level()) * 255 / BACKLIGHT_LEVELS;
442 break;
443 }
444 case id_qmk_backlight_effect: {
445# ifdef BACKLIGHT_BREATHING
446 value_data[0] = is_backlight_breathing() ? 1 : 0;
447# else
448 value_data[0] = 0;
449# endif
450 break;
451 }
452 }
453}
454
455void via_qmk_backlight_set_value(uint8_t *data) {
456 uint8_t *value_id = &(data[0]);
457 uint8_t *value_data = &(data[1]);
458 switch (*value_id) {
459 case id_qmk_backlight_brightness: {
460 // level / 255 * BACKLIGHT_LEVELS
461 backlight_level_noeeprom(((uint16_t)value_data[0]) * BACKLIGHT_LEVELS / 255);
462 break;
463 }
464 case id_qmk_backlight_effect: {
465# ifdef BACKLIGHT_BREATHING
466 if (value_data[0] == 0) {
467 backlight_disable_breathing();
468 } else {
469 backlight_enable_breathing();
470 }
471# endif
472 break;
473 }
474 }
475}
476
477#endif // #if defined(VIA_QMK_BACKLIGHT_ENABLE)
478
479#if defined(VIA_QMK_RGBLIGHT_ENABLE)
480
481void via_qmk_rgblight_get_value(uint8_t *data) {
482 uint8_t *value_id = &(data[0]);
483 uint8_t *value_data = &(data[1]);
484 switch (*value_id) {
485 case id_qmk_rgblight_brightness: {
486 value_data[0] = rgblight_get_val();
487 break;
488 }
489 case id_qmk_rgblight_effect: {
490 value_data[0] = rgblight_get_mode();
491 break;
492 }
493 case id_qmk_rgblight_effect_speed: {
494 value_data[0] = rgblight_get_speed();
495 break;
496 }
497 case id_qmk_rgblight_color: {
498 value_data[0] = rgblight_get_hue();
499 value_data[1] = rgblight_get_sat();
500 break;
501 }
502 }
503}
504
505void via_qmk_rgblight_set_value(uint8_t *data) {
506 uint8_t *value_id = &(data[0]);
507 uint8_t *value_data = &(data[1]);
508 switch (*value_id) {
509 case id_qmk_rgblight_brightness: {
510 rgblight_sethsv_noeeprom(rgblight_get_hue(), rgblight_get_sat(), value_data[0]);
511 break;
512 }
513 case id_qmk_rgblight_effect: {
514 rgblight_mode_noeeprom(value_data[0]);
515 if (value_data[0] == 0) {
516 rgblight_disable_noeeprom();
517 } else {
518 rgblight_enable_noeeprom();
519 }
520 break;
521 }
522 case id_qmk_rgblight_effect_speed: {
523 rgblight_set_speed_noeeprom(value_data[0]);
524 break;
525 }
526 case id_qmk_rgblight_color: {
527 rgblight_sethsv_noeeprom(value_data[0], value_data[1], rgblight_get_val());
528 break;
529 }
530 }
531}
532
533#endif // #if defined(VIA_QMK_RGBLIGHT_ENABLE)