alfrdmalr.c 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include "alfrdmalr.h"
  2. #include "muse.h"
  3. bool muse_mode = false;
  4. uint8_t last_muse_note = 0;
  5. uint16_t muse_counter = 0;
  6. uint8_t muse_offset = 70;
  7. uint16_t muse_tempo = 50;
  8. void leader_end_user(void) {
  9. // reset keyboard to bootloader
  10. if (leader_sequence_five_keys(KC_R, KC_E, KC_S, KC_E, KC_T)) {
  11. reset_keyboard();
  12. }
  13. }
  14. void matrix_scan_user(void) {
  15. #ifdef AUDIO_ENABLE
  16. if (muse_mode) {
  17. if (muse_counter == 0) {
  18. uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
  19. if (muse_note != last_muse_note) {
  20. stop_note(compute_freq_for_midi_note(last_muse_note));
  21. play_note(compute_freq_for_midi_note(muse_note), 0xF);
  22. last_muse_note = muse_note;
  23. }
  24. }
  25. muse_counter = (muse_counter + 1) % muse_tempo;
  26. } else {
  27. if (muse_counter) {
  28. stop_all_notes();
  29. muse_counter = 0;
  30. }
  31. }
  32. #endif
  33. }
  34. bool syml_pressed = false;
  35. bool symr_pressed = false;
  36. bool settings_active = false;
  37. bool symbols_active = false;
  38. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  39. switch(keycode) {
  40. case SYML:
  41. if (record->event.pressed) {
  42. syml_pressed = true;
  43. } else {
  44. syml_pressed = false;
  45. }
  46. break;
  47. case SYMR:
  48. if (record->event.pressed) {
  49. symr_pressed = true;
  50. } else {
  51. symr_pressed = false;
  52. }
  53. break;
  54. }
  55. // trilayer-esque behavior. If both SYMBOL layer keys are held, then the
  56. // settings layer is open. If only one is held, SYMBOL is active.
  57. if (syml_pressed && symr_pressed) {
  58. layer_on(_SETTINGS);
  59. settings_active = true;
  60. } else if (syml_pressed || symr_pressed) {
  61. if (settings_active) {
  62. layer_off(_SETTINGS);
  63. settings_active = false;
  64. }
  65. layer_on(_SYMBOL);
  66. symbols_active = true;
  67. } else {
  68. if (symbols_active) {
  69. layer_off(_SYMBOL);
  70. symbols_active = false;
  71. }
  72. }
  73. return true;
  74. }
  75. // allow access to the settings layer to turn music mode back off
  76. bool music_mask_user(uint16_t keycode) {
  77. switch (keycode) {
  78. case SYML:
  79. case SYMR:
  80. return false;
  81. default:
  82. return true;
  83. }
  84. }