case 0: //Number 0-)
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.--.-
}
else {
case 1: //Number 1-!
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(MINS), T(SPACE), END); //-.-.--
}
else {
case 2: //Number 2-@
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
return MACRO(T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.--.-.
}
else {
case 3: // Number 3
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(MINS), T(SPACE), END); //...--
}
case 4: //Number 4-$
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(DOT), T(DOT), T(MINS), T(SPACE), END); //...-..-
}
else {
case 5: //Number 5
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.....
}
case 6: //Number 6
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //-....
}
case 7: //Number 7-&
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.-...
}
else {
case 8: //Number 8
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(MINS), T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //---..
}
case 9: //Number 9-(
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(SPACE), END); //-.--.
}
else {
case 10: //Letter A
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(DOT), T(MINS), T(SPACE), END); //.-
}
case 11: //Letter B
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //-...
}
case 12: //Letter C
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //-.-.
}
case 13: //Letter D
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(MINS), T(DOT), T(DOT), T(SPACE), END); //-..
}
case 14: //Letter E
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(DOT), T(SPACE), END); //.
}
case 15: //Letter F
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //..-.
}
case 16: //Letter G
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(MINS), T(MINS), T(DOT), T(SPACE), END); //--.
}
case 17: //Letter H
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //....
}
case 18: //Letter I
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(DOT), T(DOT), T(SPACE), END); //..
}
case 19: //Letter J
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(DOT), T(MINS), T(MINS), T(MINS), T(SPACE), END); //.---
}
case 20: //Letter K
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.-
}
case 21: //Letter L
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(SPACE), END); //.-..
}
case 22: //Letter M
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(MINS), T(MINS), T(SPACE), END); //--
}
case 23: //Letter N
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(MINS), T(DOT), T(SPACE), END); //-.
}
case 24: //Letter O
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(MINS), T(MINS), T(MINS), T(SPACE), END); //---
}
case 25: //Letter P
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(DOT), T(MINS), T(MINS), T(DOT), T(SPACE), END); //.--.
}
case 26: //Letter Q
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //--.-
}
case 27: //Letter R
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-.
}
case 28: //Letter S
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(DOT), T(DOT), T(DOT), T(SPACE), END); //...
}
case 29: //Letter T
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(MINS), T(SPACE), END); //-
}
case 30: //Letter U
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(DOT), T(DOT), T(MINS), T(SPACE), END); //..-
}
case 31: //Letter V
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //...-
}
case 32: //Letter W
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(DOT), T(MINS), T(MINS), T(SPACE), END); //.--
}
case 33: //Letter X
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(MINS), T(DOT), T(DOT), T(MINS), T(SPACE), END); //-..-
}
case 34: //Letter Y
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(SPACE), END); //-.--
}
case 35: //Letter Z
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //--..
}
case 36: //Punctuation .
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(SPACE), END); //.-.-.-
}
case 37: //Punctuation ,
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(MINS), T(MINS), T(SPACE), END); //--..--
}
case 38: //Punctuation '-"
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-..-.
}
else {
case 39: //Punctuation /-?
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //..--..
}
else {
case 40: //Punctuation ;-:
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
return MACRO(T(MINS), T(MINS), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //---...
}
else {
case 41: //Punctuation =-+
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
return MACRO(T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-.-.
}
else {
case 42: //Punctuation --_
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //..--.-
}
else {
case 43: //Morse Space
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ clear_mods();
}
return MACRO(T(BSLS), T(SPACE), END); //When pressed, this sends a slash followed by a space, making it easier to distinguish words in Morse
}
// Midi Chord Function
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- uint16_t root_note;
- uint8_t channel = midi_config.channel;
- uint8_t velocity = compute_velocity(midi_config.velocity);
+ uint16_t root_note = MIDI_INVALID_NOTE;
switch (opt) {
case 0: //Root note C
root_note = MI_C;
+ break;
case 1: //Root note C#/Db
root_note = MI_Cs;
+ break;
case 2: // Root note D
root_note = MI_D;
+ break;
case 3: // Root note D#/Eb
root_note = MI_Ds;
+ break;
case 4: // Root note E
root_note = MI_E;
+ break;
case 5: // Root note F
root_note = MI_F;
+ break;
case 6: // Root note F#/Gb
root_note = MI_Fs;
+ break;
case 7: // Root note G
root_note = MI_G;
+ break;
case 8: // Root note G#/Ab
root_note = MI_Gs;
+ break;
case 9: // Root note A
root_note = MI_A;
+ break;
case 10: // Root note A#/Bb
root_note = MI_As;
+ break;
case 11: // Root note B
root_note = MI_B;
- switch (id) {
- uint8_t root = midi_compute_note(root_note);
- uint8_t major_third = midi_compute_note(root_note) + 4;
- uint8_t minor_third = midi_compute_note(root_note) + 3;
- uint8_t fifth = midi_compute_note(root_note) + 7;
- case 0: //Major chord
- if (record->event.pressed) {
- midi_send_noteon(&midi_device, channel, root, velocity);
- midi_send_noteon(&midi_device, channel, major_third, velocity);
- midi_send_noteon(&midi_device, channel, fifth, velocity);
- }
- else {
- midi_send_noteoff(&midi_device, channel, root, velocity);
- midi_send_noteoff(&midi_device, channel, major_third, velocity);
- midi_send_noteoff(&midi_device, channel, fifth, velocity);
- }
- case 1: //Minor chord
- if (record->event.pressed) {
- midi_send_noteon(&midi_device, channel, root_note, velocity);
- midi_send_noteon(&midi_device, channel, minor_third, velocity);
- midi_send_noteon(&midi_device, channel, fifth, velocity);
- }
- else {
- midi_send_noteoff(&midi_device, channel, root, velocity);
- midi_send_noteoff(&midi_device, channel, minor_third, velocity);
- midi_send_noteoff(&midi_device, channel, fifth, velocity);
- }
+ break;
+ }
+ // uint8_t root = midi_compute_note(root_note);
+ uint8_t major_third = root_note + 4;
+ uint8_t minor_third = root_note + 3;
+ uint8_t fifth = root_note + 7;
+ switch (id) {
+ case 0: //Major chord
+ if (record->event.pressed) {
+ register_code16(root_note);
+ register_code16(major_third);
+ register_code16(fifth);
}
+ else {
+ unregister_code16(root_note);
+ unregister_code16(major_third);
+ unregister_code16(fifth);
+ }
+ break;
+ case 1: //Minor chord
+ if (record->event.pressed) {
+ register_code16(root_note);
+ register_code16(minor_third);
+ register_code16(fifth);
+ }
+ else {
+ unregister_code16(root_note);
+ unregister_code16(minor_third);
+ unregister_code16(fifth);
+ }
+ break;
}
}