encoder.c 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #include "encoder.h"
  2. bool encoder_update_user(uint8_t index, bool clockwise) {
  3. static uint16_t kc;
  4. uint8_t temp_mod = get_mods();
  5. if (index == 0) { /* first encoder */
  6. if (clockwise) {
  7. //if (temp_mod & MOD_BIT(KC_HYPR)){ // TODO: not how this works, only registers CTRL
  8. if ((temp_mod & MOD_MASK_CTRL) && (temp_mod & MOD_MASK_SHIFT) && (temp_mod & MOD_MASK_ALT) && (temp_mod & MOD_MASK_GUI)) { // HYPER
  9. kc = encoder_actions[0][8];
  10. } else if ( (temp_mod & MOD_MASK_SHIFT) && (temp_mod & MOD_MASK_ALT) ) { // ALT+SHIFT
  11. kc = encoder_actions[0][7];
  12. } else if ( (temp_mod & MOD_MASK_SHIFT) && (temp_mod & MOD_MASK_CTRL) ) { // CTRL+SHIFT
  13. kc = encoder_actions[0][6];
  14. } else if ( (temp_mod & MOD_MASK_CTRL) && (temp_mod & MOD_MASK_ALT) ) { // CTRL+ALT
  15. kc = encoder_actions[0][5];
  16. } else if (temp_mod & MOD_MASK_GUI) { // GUI
  17. kc = encoder_actions[0][4];
  18. } else if (temp_mod & MOD_MASK_SHIFT) { // SHIFT
  19. kc = encoder_actions[0][3];
  20. } else if (temp_mod & MOD_MASK_ALT) { // ALT
  21. kc = encoder_actions[0][2];
  22. } else if (temp_mod & MOD_MASK_CTRL) { // CTRL
  23. kc = encoder_actions[0][1];
  24. } else { // None
  25. kc = encoder_actions[0][0];
  26. }
  27. } else { // Counter Clockwise
  28. if ((temp_mod & MOD_MASK_CTRL) && (temp_mod & MOD_MASK_SHIFT) && (temp_mod & MOD_MASK_ALT) && (temp_mod & MOD_MASK_GUI)) { // HYPER
  29. kc = encoder_actions[1][8];
  30. } else if ( (temp_mod & MOD_MASK_SHIFT) && (temp_mod & MOD_MASK_ALT) ) { // ALT+SHIFT
  31. kc = encoder_actions[1][7];
  32. } else if ( (temp_mod & MOD_MASK_SHIFT) && (temp_mod & MOD_MASK_CTRL) ) { // CTRL+SHIFT
  33. kc = encoder_actions[1][6];
  34. } else if ( (temp_mod & MOD_MASK_CTRL) && (temp_mod & MOD_MASK_ALT) ) { // CTRL+ALT
  35. kc = encoder_actions[1][5];
  36. } else if (temp_mod & MOD_MASK_GUI) { // GUI
  37. kc = encoder_actions[1][4];
  38. } else if (temp_mod & MOD_MASK_SHIFT) { // SHIFT
  39. kc = encoder_actions[1][3];
  40. } else if (temp_mod & MOD_MASK_ALT) { // ALT
  41. kc = encoder_actions[1][2];
  42. } else if (temp_mod & MOD_MASK_CTRL) { // CTRL
  43. kc = encoder_actions[1][1];
  44. } else { // None
  45. kc = encoder_actions[1][0];
  46. }
  47. }
  48. clear_mods();
  49. tap_code16(kc);
  50. set_mods(temp_mod);
  51. } else if (index == 1){ // second Encoder
  52. if (clockwise) {
  53. tap_code(KC_0);
  54. } else{
  55. tap_code(KC_1);
  56. }
  57. }
  58. return true;
  59. }
  60. const uint16_t PROGMEM encoder_actions[][9] = { \
  61. // None CTRL ALT SHIFT GUI CTRL+ALT CTRL+SHFT ALT+SHFT HYPER
  62. { KC_PGDN, KC_DOWN, KC_AUDIO_VOL_UP, KC_END, KC_WWW_FORWARD, KC_AUDIO_MUTE, KC_RIGHT, LSFT(KC_TAB), KC_MEDIA_NEXT_TRACK}, \
  63. { KC_PGUP, KC_UP, KC_AUDIO_VOL_DOWN, KC_HOME, KC_WWW_BACK, KC_MEDIA_PLAY_PAUSE, KC_LEFT, KC_TAB, KC_MEDIA_PREV_TRACK}
  64. };