ortho75.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include "ortho75.h"
  2. #define MEDIA_KEY_DELAY 10
  3. uint8_t layer = 0;
  4. uint32_t layer_state_set_kb(uint32_t state) {
  5. state = layer_state_set_user(state);
  6. layer = biton32(state);
  7. return state;
  8. }
  9. bool encoder_update_kb(uint8_t index, bool clockwise) {
  10. if (!encoder_update_user(index, clockwise)) return false;
  11. uint16_t mapped_code = 0;
  12. if (index == 0) {
  13. if (clockwise) {
  14. switch(layer){
  15. case 0:
  16. default:
  17. mapped_code = KC_VOLU;
  18. break;
  19. case 1:
  20. mapped_code = KC_MEDIA_NEXT_TRACK;
  21. break;
  22. case 2:
  23. mapped_code = KC_PGDN;
  24. break;
  25. }
  26. } else {
  27. switch(layer){
  28. case 0:
  29. default:
  30. mapped_code = KC_VOLD;
  31. break;
  32. case 1:
  33. mapped_code = KC_MEDIA_PREV_TRACK;
  34. break;
  35. case 2:
  36. mapped_code = KC_PGUP;
  37. break;
  38. }
  39. }
  40. uint16_t held_keycode_timer = timer_read();
  41. register_code(mapped_code);
  42. while (timer_elapsed(held_keycode_timer) < MEDIA_KEY_DELAY){ /* no-op */ }
  43. unregister_code(mapped_code);
  44. }
  45. return true;
  46. }