logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

v2.c (2411B)


  1. // Copyright 2022 Jay Greco
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "v2.h"
  4. // SCRAMBLE PWM LED config
  5. pwm_led_t scramble_rgb = {
  6. {GP18, GP19, GP20},
  7. {&PWMD1, &PWMD1, &PWMD2},
  8. {0, 1, 0},
  9. PWM_OUTPUT_ACTIVE_LOW,
  10. 0
  11. };
  12. // Internal PWM init
  13. // only runs once per PWM LED
  14. void _init_pwm(pwm_led_t* led) {
  15. if (!led->init_complete) {
  16. for (int i=0; i<NUM_RGB_IDX; i++) {
  17. palSetPadMode(PAL_PORT(led->pin[i]), PAL_PAD(led->pin[i]), PWM_PAL_MODE);
  18. static PWMConfig pwmCFG = {
  19. .frequency = PWM_PWM_COUNTER_FREQUENCY,
  20. .period = PWM_PWM_PERIOD,
  21. };
  22. // Channels are always configured as active low
  23. // If active high is needed, pwm is inverted in _set_led_pwm()
  24. pwmCFG.channels[0].mode = PWM_OUTPUT_ACTIVE_LOW;
  25. pwmCFG.channels[1].mode = PWM_OUTPUT_ACTIVE_LOW;
  26. pwmStart(led->driver[i], &pwmCFG);
  27. // Start LEDs in the OFF state
  28. uint8_t pwm = led->mode == PWM_OUTPUT_ACTIVE_HIGH ? 100 : 0;
  29. pwmEnableChannel(led->driver[i], led->channel[i], PWM_FRACTION_TO_WIDTH(led->driver[i], 99, pwm));
  30. }
  31. led->init_complete = 1;
  32. }
  33. }
  34. // Internal generic PWM setter
  35. void _set_led_pwm(uint8_t pwm, pwm_led_t* led, uint8_t channel) {
  36. if (pwm > 100) pwm = 100;
  37. if (led->mode == PWM_OUTPUT_ACTIVE_HIGH) pwm = (100 - pwm);
  38. _init_pwm(led);
  39. pwmEnableChannel(led->driver[channel], led->channel[channel], PWM_FRACTION_TO_WIDTH(led->driver[channel], 99, pwm));
  40. }
  41. // SCRAMBLE
  42. void set_scramble_LED(uint8_t mode) {
  43. switch(mode) {
  44. case LED_ON:
  45. set_scramble_LED_rgb_pwm(65, 100, 95);
  46. break;
  47. case LED_DIM:
  48. set_scramble_LED_rgb_pwm(3, 9, 3);
  49. break;
  50. default: //LED_OFF
  51. set_scramble_LED_rgb_pwm(0, 0, 0);
  52. break;
  53. }
  54. }
  55. void set_scramble_LED_rgb_pwm(uint8_t r_pwm, uint8_t g_pwm, uint8_t b_pwm) {
  56. _set_led_pwm(r_pwm, &scramble_rgb, RED);
  57. _set_led_pwm(g_pwm, &scramble_rgb, GREEN);
  58. _set_led_pwm(b_pwm, &scramble_rgb, BLUE);
  59. }
  60. void set_scramble_LED_r_pwm(uint8_t pwm) {
  61. _set_led_pwm(pwm, &scramble_rgb, RED);
  62. }
  63. void set_scramble_LED_g_pwm(uint8_t pwm) {
  64. _set_led_pwm(pwm, &scramble_rgb, GREEN);
  65. }
  66. void set_scramble_LED_b_pwm(uint8_t pwm) {
  67. _set_led_pwm(pwm, &scramble_rgb, BLUE);
  68. }