Advertisement
Guest User

Untitled

a guest
Aug 29th, 2016
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.11 KB | None | 0 0
  1. #include "preonic.h"
  2. #include "action_layer.h"
  3. #include "eeconfig.h"
  4. #ifdef AUDIO_ENABLE
  5.   #include "audio.h"
  6. #endif
  7.  
  8. // Each layer gets a name for readability, which is then used in the keymap matrix below.
  9. // The underscores don't mean anything - you can have a layer called STUFF or any other name.
  10. // Layer names don't all need to be of the same length, obviously, and you can also skip them
  11. // entirely and just use numbers.
  12. #define _QWERTY 0
  13. #define _GAME 1
  14. #define _COLEMAK 2
  15. #define _DVORAK 3
  16. #define _LOWER 4
  17. #define _RAISE 5
  18. #define _ADJUST 16
  19.  
  20. enum preonic_keycodes {
  21.   QWERTY = SAFE_RANGE,
  22.     GAME,
  23.   COLEMAK,
  24.   DVORAK,
  25.   LOWER,
  26.   RAISE,
  27.   BACKLIT
  28. };
  29.  
  30. // Fillers to make layering more clear
  31. #define _______ KC_TRNS
  32. #define XXXXXXX KC_NO
  33.  
  34. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  35.  
  36. /* Qwerty
  37.  * ,-----------------------------------------------------------------------------------.
  38.  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
  39.  * |------+------+------+------+------+------+------+------+------+------+------+------|
  40.  * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Del  |
  41.  * |------+------+------+------+------+-------------+------+------+------+------+------|
  42.  * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
  43.  * |------+------+------+------+------+------|------+------+------+------+------+------|
  44.  * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |(also shift)
  45.  * |------+------+------+------+------+------+------+------+------+------+------+------|
  46.  * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
  47.  * `-----------------------------------------------------------------------------------'
  48.  */
  49. [_QWERTY] = {
  50.   {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
  51.   {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_DEL},
  52.   {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
  53.   {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, SFT_T(KC_ENTER)},
  54.   {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
  55. },
  56.  
  57. /* Colemak
  58.  * ,-----------------------------------------------------------------------------------.
  59.  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
  60.  * |------+------+------+------+------+------+------+------+------+------+------+------|
  61.  * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Del  |
  62.  * |------+------+------+------+------+-------------+------+------+------+------+------|
  63.  * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
  64.  * |------+------+------+------+------+------|------+------+------+------+------+------|
  65.  * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
  66.  * |------+------+------+------+------+------+------+------+------+------+------+------|
  67.  * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
  68.  * `-----------------------------------------------------------------------------------'
  69.  */
  70. [_COLEMAK] = {
  71.   {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
  72.   {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_DEL},
  73.   {KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT},
  74.   {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
  75.   {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
  76. },
  77.  
  78. /* Dvorak
  79.  * ,-----------------------------------------------------------------------------------.
  80.  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
  81.  * |------+------+------+------+------+------+------+------+------+------+------+------|
  82.  * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Del  |
  83.  * |------+------+------+------+------+-------------+------+------+------+------+------|
  84.  * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
  85.  * |------+------+------+------+------+------|------+------+------+------+------+------|
  86.  * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
  87.  * |------+------+------+------+------+------+------+------+------+------+------+------|
  88.  * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
  89.  * `-----------------------------------------------------------------------------------'
  90.  */
  91. [_DVORAK] = {
  92.   {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
  93.   {KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_DEL},
  94.   {KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH},
  95.   {KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT },
  96.   {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
  97. },
  98.  
  99. /* Lower
  100.  * ,-----------------------------------------------------------------------------------.
  101.  * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
  102.  * |------+------+------+------+------+-------------+------+------+------+------+------|
  103.  * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Del  |
  104.  * |------+------+------+------+------+-------------+------+------+------+------+------|
  105.  * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
  106.  * |------+------+------+------+------+------|------+------+------+------+------+------|
  107.  * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | |      |      |      |
  108.  * |------+------+------+------+------+------+------+------+------+------+------+------|
  109.  * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
  110.  * `-----------------------------------------------------------------------------------'
  111.  */
  112. [_LOWER] = {
  113.   {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
  114.   {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
  115.   {KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
  116.   {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______},
  117.   {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
  118. },
  119.  
  120. /* Raise
  121.  * ,-----------------------------------------------------------------------------------.
  122.  * |  F1  |  F2  |   F3 |   7  |   8  |   9  |   %  |   |  |   (  |   )  |   0  | Bksp |
  123.  * |------+------+------+------+------+------+------+------+------+------+------+------|
  124.  * |  F4  |  F5  |   F6 |   4  |   5  |   6  |   !  |   #  |   [  |   ]  |   0  |  Del |
  125.  * |------+------+------+------+------+-------------+------+------+------+------+------|
  126.  * |  F7  |  F8  |  F9  |   1  |   2  |   3  |   &  |   _  |   {  |   }  |   0  |  Tab |
  127.  * |------+------+------+------+------+------|------+------+------+------+------+------|
  128.  * |  F10 |  F11 |  F12 |   0  |   +  |   ~  |   ^  |   -  |   <  |   >  |   0  |   0  |
  129.  * |------+------+------+------+------+------+------+------+------+------+------+------|
  130.  * |      |      |      |   *  |   /  |             |      | Next | Vol- | Vol+ | Play |
  131.  * `-----------------------------------------------------------------------------------'
  132.  */
  133.  
  134. [_RAISE] = {
  135.   {  KC_F1,   KC_F2,   KC_F3,    KC_7,       KC_8,         KC_9,     KC_PERC,      KC_PIPE,   KC_LPRN,   KC_RPRN,   _______,    KC_BSPC},
  136.   {  KC_F4,   KC_F5,   KC_F6,    KC_4,       KC_5,         KC_6,     KC_EXLM,      KC_HASH,   KC_LBRC,   KC_RBRC,   _______,     KC_DEL},
  137.   {  KC_F7,   KC_F8,   KC_F9,    KC_1,       KC_2,         KC_3,     KC_AMPR,      KC_UNDS,   KC_LCBR,   KC_RCBR,   _______,    KC_TAB},
  138.   { KC_F10,  KC_F11,  KC_F12,    KC_0,    KC_PLUS,      KC_TILD,     KC_CIRC,      KC_MINS,   KC_LABK,   KC_RABK,   _______,    KC_F9},
  139.   {_______, _______, _______, KC_ASTR,    KC_SLSH,       KC_SPC,      KC_SPC,      _______,   KC_MNXT,   KC_VOLD,   KC_VOLU,     KC_MPLY}
  140. },
  141.  
  142. /* GAME
  143.  * ,-----------------------------------------------------------------------------------.
  144.  * |  ESC |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
  145.  * |------+------+------+------+------+------+------+------+------+------+------+------|
  146.  * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Del  |
  147.  * |------+------+------+------+------+-------------+------+------+------+------+------|
  148.  * |   '  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
  149.  * |------+------+------+------+------+------|------+------+------+------+------+------|
  150.  * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |  Up  |Enter |(also shift)
  151.  * |------+------+------+------+------+------+------+------+------+------+------+------|
  152.  * | Ctrl | light| Alt  | GUI  |Lower |    Space    |Raise |   /  | Left | Down |Right |
  153.  * `-----------------------------------------------------------------------------------'
  154.  */
  155. [_GAME] = {
  156.   { KC_ESC,   KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
  157.   { KC_TAB,   KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_DEL},
  158.   { KC_GRV,   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
  159.   {KC_LSFT,   KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_UP,   SFT_T(KC_ENTER)},
  160.   {KC_LCTL,BACKLIT, KC_LALT, KC_LGUI,   LOWER,  KC_SPC,  KC_SPC,   RAISE,  KC_SLSH, KC_LEFT,  KC_DOWN, KC_RGHT}
  161. },
  162. /* Adjust (Lower + Raise)
  163.  * ,-----------------------------------------------------------------------------------.
  164.  * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |
  165.  * |------+------+------+------+------+------+------+------+------+------+------+------|
  166.  * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
  167.  * |------+------+------+------+------+-------------+------+------+------+------+------|
  168.  * |      |      |      |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| GAME |      |
  169.  * |------+------+------+------+------+------|------+------+------+------+------+------|
  170.  * |      |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff|      |      |      |      |      |
  171.  * |------+------+------+------+------+------+------+------+------+------+------+------|
  172.  * |      |      |      |      |      |             |      |      |      |      |      |
  173.  * `-----------------------------------------------------------------------------------'
  174.  */
  175. [_ADJUST] = {
  176.   {KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12},
  177.   {_______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
  178.   {_______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  GAME , _______},
  179.   {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______},
  180.   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
  181. }
  182.  
  183.  
  184. };
  185.  
  186. #ifdef AUDIO_ENABLE
  187. float tone_startup[][2] = {
  188.   {NOTE_B5, 20},
  189.   {NOTE_B6, 8},
  190.   {NOTE_DS6, 20},
  191.   {NOTE_B6, 8}
  192. };
  193.  
  194. float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
  195. float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
  196. float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
  197. //float tone_game[][2]     = SONG(GAME_SOUND);
  198. float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
  199.  
  200. float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
  201. #endif
  202.  
  203. void persistant_default_layer_set(uint16_t default_layer) {
  204.   eeconfig_update_default_layer(default_layer);
  205.   default_layer_set(default_layer);
  206. }
  207.  
  208. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  209.   switch (keycode) {
  210.         case QWERTY:
  211.           if (record->event.pressed) {
  212.             #ifdef AUDIO_ENABLE
  213.               PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
  214.             #endif
  215.             persistant_default_layer_set(1UL<<_QWERTY);
  216.           }
  217.           return false;
  218.           break;
  219.         case COLEMAK:
  220.           if (record->event.pressed) {
  221.             #ifdef AUDIO_ENABLE
  222.               PLAY_NOTE_ARRAY(tone_colemak, false, 0);
  223.             #endif
  224.             persistant_default_layer_set(1UL<<_COLEMAK);
  225.           }
  226.           return false;
  227.           break;
  228.         case DVORAK:
  229.           if (record->event.pressed) {
  230.             #ifdef AUDIO_ENABLE
  231.               PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
  232.             #endif
  233.             persistant_default_layer_set(1UL<<_DVORAK);
  234.           }
  235.           return false;
  236.           break;
  237.         case LOWER:
  238.           if (record->event.pressed) {
  239.             layer_on(_LOWER);
  240.             update_tri_layer(_LOWER, _RAISE, _ADJUST);
  241.           } else {
  242.             layer_off(_LOWER);
  243.             update_tri_layer(_LOWER, _RAISE, _ADJUST);
  244.           }
  245.           return false;
  246.           break;
  247.         case RAISE:
  248.           if (record->event.pressed) {
  249.             layer_on(_RAISE);
  250.             update_tri_layer(_LOWER, _RAISE, _ADJUST);
  251.           } else {
  252.             layer_off(_RAISE);
  253.             update_tri_layer(_LOWER, _RAISE, _ADJUST);
  254.           }
  255.           return false;
  256.           break;
  257.         case BACKLIT:
  258.           if (record->event.pressed) {
  259.             register_code(KC_RSFT);
  260.             #ifdef BACKLIGHT_ENABLE
  261.               backlight_step();
  262.             #endif
  263.           } else {
  264.             unregister_code(KC_RSFT);
  265.           }
  266.           return false;
  267.           break;
  268.  
  269.         case GAME:
  270.       if (record->event.pressed) {
  271.         #ifdef AUDIO_ENABLE
  272.           PLAY_NOTE_ARRAY(tone_dvorak, false, 0);// switched tone to davorake to see if it would fix
  273.         #endif
  274.         persistant_default_layer_set(1UL<<_GAME);
  275.       }
  276.       return false;
  277.       break;
  278.       }
  279.     return true;
  280. };
  281.  
  282. void matrix_init_user(void) {
  283.     #ifdef AUDIO_ENABLE
  284.         startup_user();
  285.     #endif
  286. }
  287.  
  288. #ifdef AUDIO_ENABLE
  289.  
  290. void startup_user()
  291. {
  292.     _delay_ms(20); // gets rid of tick
  293.     PLAY_NOTE_ARRAY(tone_startup, false, 0);
  294. }
  295.  
  296. void shutdown_user()
  297. {
  298.     PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
  299.     _delay_ms(150);
  300.     stop_all_notes();
  301. }
  302.  
  303. void music_on_user(void)
  304. {
  305.     music_scale_user();
  306. }
  307.  
  308. void music_scale_user(void)
  309. {
  310.     PLAY_NOTE_ARRAY(music_scale, false, 0);
  311. }
  312.  
  313. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement