logo

qmk_firmware

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

makeymakey.c (4211B)


  1. /* Copyright 2022 Jose Pablo Ramirez <jp.ramangulo@gmail.com>
  2. *
  3. * This program is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 2 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #include "quantum.h"
  17. static pin_t pins[MATRIX_ROWS][MATRIX_COLS] = DIRECT_PINS;
  18. static pin_t led_pins[LED_PINS] = LED_PINS_HW;
  19. static bool led_state[MATRIX_COLS] = {0};
  20. static uint8_t led_cycle_counter = 0;
  21. void keyboard_post_init_kb(void) {
  22. for(uint8_t row = 0; row < MATRIX_ROWS; row++)
  23. {
  24. for(uint8_t col = 0; col < MATRIX_COLS; col++)
  25. {
  26. gpio_write_pin_low(pins[row][col]); //Disable internal pull-up resistors
  27. }
  28. }
  29. keyboard_post_init_user();
  30. }
  31. void cycle_leds(void) {
  32. for(uint8_t i = 0; i < 3; i++) {
  33. gpio_set_pin_input(led_pins[i]);
  34. gpio_write_pin_low(led_pins[i]);
  35. }
  36. led_cycle_counter++;
  37. led_cycle_counter %= 6;
  38. switch (led_cycle_counter) {
  39. case 0:
  40. if (led_state[0]) { // Up Arrow
  41. gpio_set_pin_input(led_pins[0]);
  42. gpio_write_pin_low(led_pins[0]);
  43. gpio_set_pin_output(led_pins[1]);
  44. gpio_write_pin_high(led_pins[1]);
  45. gpio_set_pin_output(led_pins[2]);
  46. gpio_write_pin_low(led_pins[2]);
  47. }
  48. break;
  49. case 1:
  50. if (led_state[1]) { // Down Arrow
  51. gpio_set_pin_output(led_pins[0]);
  52. gpio_write_pin_high(led_pins[0]);
  53. gpio_set_pin_output(led_pins[1]);
  54. gpio_write_pin_low(led_pins[1]);
  55. gpio_set_pin_input(led_pins[2]);
  56. gpio_write_pin_low(led_pins[2]);
  57. }
  58. break;
  59. case 2:
  60. if (led_state[2]) { // Left Arrow
  61. gpio_set_pin_output(led_pins[0]);
  62. gpio_write_pin_low(led_pins[0]);
  63. gpio_set_pin_output(led_pins[1]);
  64. gpio_write_pin_high(led_pins[1]);
  65. gpio_set_pin_input(led_pins[2]);
  66. gpio_write_pin_low(led_pins[2]);
  67. }
  68. break;
  69. case 3:
  70. if (led_state[3]) { // Right Arrow
  71. gpio_set_pin_input(led_pins[0]);
  72. gpio_write_pin_low(led_pins[0]);
  73. gpio_set_pin_output(led_pins[1]);
  74. gpio_write_pin_low(led_pins[1]);
  75. gpio_set_pin_output(led_pins[2]);
  76. gpio_write_pin_high(led_pins[2]);
  77. }
  78. break;
  79. case 4:
  80. if (led_state[4]) { // Space
  81. gpio_set_pin_output(led_pins[0]);
  82. gpio_write_pin_low(led_pins[0]);
  83. gpio_set_pin_input(led_pins[1]);
  84. gpio_write_pin_low(led_pins[1]);
  85. gpio_set_pin_output(led_pins[2]);
  86. gpio_write_pin_high(led_pins[2]);
  87. }
  88. break;
  89. case 5:
  90. if (led_state[5]) { // Right Click
  91. gpio_set_pin_output(led_pins[0]);
  92. gpio_write_pin_high(led_pins[0]);
  93. gpio_set_pin_input(led_pins[1]);
  94. gpio_write_pin_low(led_pins[1]);
  95. gpio_set_pin_output(led_pins[2]);
  96. gpio_write_pin_low(led_pins[2]);
  97. }
  98. break;
  99. default:
  100. break;
  101. }
  102. }
  103. void housekeeping_task_kb(void) {
  104. cycle_leds();
  105. }
  106. bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
  107. uint8_t row = record->event.key.row;
  108. uint8_t col = record->event.key.col;
  109. if(row == 0 && col >= 0 && col < MATRIX_COLS) {
  110. led_state[col] = record->event.pressed;
  111. }
  112. return process_record_user(keycode, record);
  113. }