logo

qmk_firmware

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

knobx1.c (2326B)


  1. // (c) 2025 Binepad (@binpad)
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "knobx1.h"
  4. #ifdef DYNAMIC_KEYMAP_LAYER_COUNT
  5. # define X1_KEYMAP_LAYER_COUNT DYNAMIC_KEYMAP_LAYER_COUNT
  6. #else
  7. # define X1_KEYMAP_LAYER_COUNT 4
  8. #endif
  9. void keyboard_pre_init_kb(void) {
  10. const pin_t indicator_leds[4] = {IND1_LED, IND2_LED, IND3_LED, IND4_LED};
  11. for (int i = 0; i < 4; i++) {
  12. gpio_set_pin_output(indicator_leds[i]); // Set Indicators as output
  13. gpio_write_pin_low(indicator_leds[i]); // Set initial indicator low / OFF
  14. }
  15. // Call the user pre-init function if needed
  16. // Do it after ._kb incase the user wants to change pin stuff
  17. keyboard_pre_init_user();
  18. }
  19. layer_state_t layer_state_set_kb(layer_state_t state) {
  20. state = layer_state_set_user(state);
  21. uint8_t layer = get_highest_layer(state);
  22. x1_layer_led(layer);
  23. return state;
  24. }
  25. void matrix_init_kb(void) {
  26. // Direct PINS use; gpio -> switch -> ground.
  27. // Setting Row 0 to ground makes it work like a direct pin
  28. gpio_set_pin_output(ROW0_PIN); // Set Col0 as an output
  29. gpio_write_pin_low(ROW0_PIN); // Set Col0 to low / ground
  30. matrix_init_user();
  31. }
  32. bool process_x1_layer_up(keyrecord_t *record) {
  33. if (record->event.pressed) {
  34. uint8_t current_layer = get_highest_layer(layer_state);
  35. // Cycle through layers
  36. uint8_t next_layer = (current_layer + 1) % X1_KEYMAP_LAYER_COUNT;
  37. layer_move(next_layer);
  38. x1_layer_led(next_layer); // Update LED indicators
  39. }
  40. return false;
  41. }
  42. bool process_x1_layer_down(keyrecord_t *record) {
  43. if (record->event.pressed) {
  44. uint8_t current_layer = get_highest_layer(layer_state);
  45. // Reverse through layers
  46. uint8_t prev_layer = (current_layer == 0) ? (X1_KEYMAP_LAYER_COUNT - 1) : (current_layer - 1);
  47. layer_move(prev_layer);
  48. x1_layer_led(prev_layer);
  49. }
  50. return false;
  51. }
  52. bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
  53. if (!process_record_user(keycode, record)) {
  54. return false;
  55. }
  56. switch (keycode) {
  57. case X1_LAYER_SELECTOR_UP:
  58. return process_x1_layer_up(record);
  59. case X1_LAYER_SELECTOR_DOWN:
  60. return process_x1_layer_down(record);
  61. default:
  62. return true;
  63. }
  64. }