diff options
| author | Wilba <Jason.S.Williams@gmail.com> | 2020-01-21 05:18:25 +1100 |
|---|---|---|
| committer | MechMerlin <30334081+mechmerlin@users.noreply.github.com> | 2020-01-20 10:18:25 -0800 |
| commit | 484a9b12bc3961fc0dd9481d3cb734959db42191 (patch) | |
| tree | ca2e4219b6514c1033be3ab3a975bd24f723f2ba /quantum/via.c | |
| parent | ce81c4f89b61560ee35436b351b27fd23568c32f (diff) | |
| download | qmk_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.c | 182 |
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) | ||
| 52 | void via_qmk_backlight_set_value(uint8_t *data); | ||
| 53 | void via_qmk_backlight_get_value(uint8_t *data); | ||
| 54 | #endif | ||
| 55 | |||
| 56 | #if defined(VIA_QMK_RGBLIGHT_ENABLE) | ||
| 57 | void via_qmk_rgblight_set_value(uint8_t *data); | ||
| 58 | void 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. |
| 35 | bool via_eeprom_is_valid(void) { | 63 | bool 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 | |||
| 435 | void 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 | |||
| 455 | void 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 | |||
| 481 | void 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 | |||
| 505 | void 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) | ||
