aboutsummaryrefslogtreecommitdiff
path: root/quantum
diff options
context:
space:
mode:
Diffstat (limited to 'quantum')
-rw-r--r--quantum/backlight/backlight.c20
-rw-r--r--quantum/backlight/backlight.h2
-rw-r--r--quantum/rgblight.c20
-rw-r--r--quantum/rgblight.h6
-rw-r--r--quantum/via.c182
-rw-r--r--quantum/via.h58
6 files changed, 260 insertions, 28 deletions
diff --git a/quantum/backlight/backlight.c b/quantum/backlight/backlight.c
index e57b31d10..4aa74667d 100644
--- a/quantum/backlight/backlight.c
+++ b/quantum/backlight/backlight.c
@@ -130,18 +130,30 @@ void backlight_step(void) {
130 backlight_set(backlight_config.level); 130 backlight_set(backlight_config.level);
131} 131}
132 132
133/** \brief Backlight set level 133/** \brief Backlight set level without EEPROM update
134 * 134 *
135 * FIXME: needs doc
136 */ 135 */
137void backlight_level(uint8_t level) { 136void backlight_level_noeeprom(uint8_t level) {
138 if (level > BACKLIGHT_LEVELS) level = BACKLIGHT_LEVELS; 137 if (level > BACKLIGHT_LEVELS) level = BACKLIGHT_LEVELS;
139 backlight_config.level = level; 138 backlight_config.level = level;
140 backlight_config.enable = !!backlight_config.level; 139 backlight_config.enable = !!backlight_config.level;
141 eeconfig_update_backlight(backlight_config.raw);
142 backlight_set(backlight_config.level); 140 backlight_set(backlight_config.level);
143} 141}
144 142
143/** \brief Backlight set level
144 *
145 * FIXME: needs doc
146 */
147void backlight_level(uint8_t level) {
148 backlight_level_noeeprom(level);
149 eeconfig_update_backlight(backlight_config.raw);
150}
151
152/** \brief Update current backlight state to EEPROM
153 *
154 */
155void eeconfig_update_backlight_current(void) { eeconfig_update_backlight(backlight_config.raw); }
156
145/** \brief Get backlight level 157/** \brief Get backlight level
146 * 158 *
147 * FIXME: needs doc 159 * FIXME: needs doc
diff --git a/quantum/backlight/backlight.h b/quantum/backlight/backlight.h
index 9f0a5e81d..08acf942f 100644
--- a/quantum/backlight/backlight.h
+++ b/quantum/backlight/backlight.h
@@ -48,8 +48,10 @@ bool is_backlight_enabled(void);
48void backlight_step(void); 48void backlight_step(void);
49void backlight_increase(void); 49void backlight_increase(void);
50void backlight_decrease(void); 50void backlight_decrease(void);
51void backlight_level_noeeprom(uint8_t level);
51void backlight_level(uint8_t level); 52void backlight_level(uint8_t level);
52uint8_t get_backlight_level(void); 53uint8_t get_backlight_level(void);
54void eeconfig_update_backlight_current(void);
53 55
54// implementation specific 56// implementation specific
55void backlight_init_ports(void); 57void backlight_init_ports(void);
diff --git a/quantum/rgblight.c b/quantum/rgblight.c
index 26887f057..85b319110 100644
--- a/quantum/rgblight.c
+++ b/quantum/rgblight.c
@@ -160,6 +160,10 @@ void eeconfig_update_rgblight(uint32_t val) {
160#endif 160#endif
161} 161}
162 162
163void eeconfig_update_rgblight_current(void) {
164 eeconfig_update_rgblight(rgblight_config.raw);
165}
166
163void eeconfig_update_rgblight_default(void) { 167void eeconfig_update_rgblight_default(void) {
164 rgblight_config.enable = 1; 168 rgblight_config.enable = 1;
165 rgblight_config.mode = RGBLIGHT_MODE_STATIC_LIGHT; 169 rgblight_config.mode = RGBLIGHT_MODE_STATIC_LIGHT;
@@ -501,6 +505,22 @@ void rgblight_sethsv(uint8_t hue, uint8_t sat, uint8_t val) { rgblight_sethsv_ee
501 505
502void rgblight_sethsv_noeeprom(uint8_t hue, uint8_t sat, uint8_t val) { rgblight_sethsv_eeprom_helper(hue, sat, val, false); } 506void rgblight_sethsv_noeeprom(uint8_t hue, uint8_t sat, uint8_t val) { rgblight_sethsv_eeprom_helper(hue, sat, val, false); }
503 507
508uint8_t rgblight_get_speed(void) { return rgblight_config.speed; }
509
510void rgblight_set_speed_eeprom_helper(uint8_t speed, bool write_to_eeprom) {
511 rgblight_config.speed = speed;
512 if (write_to_eeprom) {
513 eeconfig_update_rgblight(rgblight_config.raw); // EECONFIG needs to be increased to support this
514 dprintf("rgblight set speed [EEPROM]: %u\n", rgblight_config.speed);
515 } else {
516 dprintf("rgblight set speed [NOEEPROM]: %u\n", rgblight_config.speed);
517 }
518}
519
520void rgblight_set_speed(uint8_t speed) { rgblight_set_speed_eeprom_helper(speed, true); }
521
522void rgblight_set_speed_noeeprom(uint8_t speed) { rgblight_set_speed_eeprom_helper(speed, false); }
523
504uint8_t rgblight_get_hue(void) { return rgblight_config.hue; } 524uint8_t rgblight_get_hue(void) { return rgblight_config.hue; }
505 525
506uint8_t rgblight_get_sat(void) { return rgblight_config.sat; } 526uint8_t rgblight_get_sat(void) { return rgblight_config.sat; }
diff --git a/quantum/rgblight.h b/quantum/rgblight.h
index e3aa098e4..f6746e50f 100644
--- a/quantum/rgblight.h
+++ b/quantum/rgblight.h
@@ -233,6 +233,11 @@ void rgblight_decrease_speed(void);
233void rgblight_sethsv(uint8_t hue, uint8_t sat, uint8_t val); 233void rgblight_sethsv(uint8_t hue, uint8_t sat, uint8_t val);
234void rgblight_sethsv_noeeprom(uint8_t hue, uint8_t sat, uint8_t val); 234void rgblight_sethsv_noeeprom(uint8_t hue, uint8_t sat, uint8_t val);
235 235
236/* effect speed */
237uint8_t rgblight_get_speed(void);
238void rgblight_set_speed(uint8_t speed);
239void rgblight_set_speed_noeeprom(uint8_t speed);
240
236/* query */ 241/* query */
237uint8_t rgblight_get_mode(void); 242uint8_t rgblight_get_mode(void);
238uint8_t rgblight_get_hue(void); 243uint8_t rgblight_get_hue(void);
@@ -245,6 +250,7 @@ uint32_t rgblight_read_dword(void);
245void rgblight_update_dword(uint32_t dword); 250void rgblight_update_dword(uint32_t dword);
246uint32_t eeconfig_read_rgblight(void); 251uint32_t eeconfig_read_rgblight(void);
247void eeconfig_update_rgblight(uint32_t val); 252void eeconfig_update_rgblight(uint32_t val);
253void eeconfig_update_rgblight_current(void);
248void eeconfig_update_rgblight_default(void); 254void eeconfig_update_rgblight_default(void);
249void eeconfig_debug_rgblight(void); 255void eeconfig_debug_rgblight(void);
250 256
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)
diff --git a/quantum/via.h b/quantum/via.h
index 98f8dea8c..012547e05 100644
--- a/quantum/via.h
+++ b/quantum/via.h
@@ -51,29 +51,45 @@
51#define VIA_PROTOCOL_VERSION 0x0009 51#define VIA_PROTOCOL_VERSION 0x0009
52 52
53enum via_command_id { 53enum via_command_id {
54 id_get_protocol_version = 0x01, // always 0x01 54 id_get_protocol_version = 0x01, // always 0x01
55 id_get_keyboard_value, 55 id_get_keyboard_value = 0x02,
56 id_set_keyboard_value, 56 id_set_keyboard_value = 0x03,
57 id_dynamic_keymap_get_keycode, 57 id_dynamic_keymap_get_keycode = 0x04,
58 id_dynamic_keymap_set_keycode, 58 id_dynamic_keymap_set_keycode = 0x05,
59 id_dynamic_keymap_reset, 59 id_dynamic_keymap_reset = 0x06,
60 id_backlight_config_set_value, 60 id_lighting_set_value = 0x07,
61 id_backlight_config_get_value, 61 id_lighting_get_value = 0x08,
62 id_backlight_config_save, 62 id_lighting_save = 0x09,
63 id_eeprom_reset, 63 id_eeprom_reset = 0x0A,
64 id_bootloader_jump, 64 id_bootloader_jump = 0x0B,
65 id_dynamic_keymap_macro_get_count, 65 id_dynamic_keymap_macro_get_count = 0x0C,
66 id_dynamic_keymap_macro_get_buffer_size, 66 id_dynamic_keymap_macro_get_buffer_size = 0x0D,
67 id_dynamic_keymap_macro_get_buffer, 67 id_dynamic_keymap_macro_get_buffer = 0x0E,
68 id_dynamic_keymap_macro_set_buffer, 68 id_dynamic_keymap_macro_set_buffer = 0x0F,
69 id_dynamic_keymap_macro_reset, 69 id_dynamic_keymap_macro_reset = 0x10,
70 id_dynamic_keymap_get_layer_count, 70 id_dynamic_keymap_get_layer_count = 0x11,
71 id_dynamic_keymap_get_buffer, 71 id_dynamic_keymap_get_buffer = 0x12,
72 id_dynamic_keymap_set_buffer, 72 id_dynamic_keymap_set_buffer = 0x13,
73 id_unhandled = 0xFF, 73 id_unhandled = 0xFF,
74}; 74};
75 75
76enum via_keyboard_value_id { id_uptime = 0x01, id_layout_options, id_switch_matrix_state }; 76enum via_keyboard_value_id {
77 id_uptime = 0x01, //
78 id_layout_options = 0x02,
79 id_switch_matrix_state = 0x03
80};
81
82enum via_lighting_value {
83 // QMK BACKLIGHT
84 id_qmk_backlight_brightness = 0x09,
85 id_qmk_backlight_effect = 0x0A,
86
87 // QMK RGBLIGHT
88 id_qmk_rgblight_brightness = 0x80,
89 id_qmk_rgblight_effect = 0x81,
90 id_qmk_rgblight_effect_speed = 0x82,
91 id_qmk_rgblight_color = 0x83,
92};
77 93
78// Can't use SAFE_RANGE here, it might change if someone adds 94// Can't use SAFE_RANGE here, it might change if someone adds
79// new values to enum quantum_keycodes. 95// new values to enum quantum_keycodes.