commit
						ec67d32bd4
					
				| @ -0,0 +1,89 @@ | ||||
| // This is the personal keymap of Ian Sterling (@xyverz). It is based on the keymap by
 | ||||
| // Chris Gerber (@gerbercj), with the addition of persistent layers like the Planck and
 | ||||
| // Preonic keyboards by Jack Humbert.
 | ||||
| 
 | ||||
| #include "atreus.h" | ||||
| #include "action_layer.h" | ||||
| #include "eeconfig.h" | ||||
| 
 | ||||
| extern keymap_config_t keymap_config; | ||||
| 
 | ||||
| // Each layer gets a name for readability, which is then used in the keymap matrix below.
 | ||||
| // The underscores don't mean anything - you can have a layer called STUFF or any other name.
 | ||||
| // Layer names don't all need to be of the same length, obviously, and you can also skip them
 | ||||
| // entirely and just use numbers.
 | ||||
| #define _DV 0 | ||||
| #define _QW 1 | ||||
| #define _CM 2 | ||||
| #define _L1 3 | ||||
| #define _L2 4 | ||||
| 
 | ||||
| // Macro name shortcuts
 | ||||
| #define DVORAK M(_DV) | ||||
| #define QWERTY M(_QW) | ||||
| #define COLEMAK M(_CM) | ||||
| 
 | ||||
| 
 | ||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
|   [_DV] = { /* Dvorak */ | ||||
|     {KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_NO,   KC_F,    KC_G,    KC_C,    KC_R,    KC_L   }, | ||||
|     {KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_NO,   KC_D,    KC_H,    KC_T,    KC_N,    KC_S   }, | ||||
|     {SFT_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, CTL_T(KC_DEL),  KC_B,  KC_M,  KC_W,  KC_V,   SFT_T(KC_Z) }, | ||||
|     {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_SLSH, KC_EQL} | ||||
|   }, | ||||
|   [_QW] = { /* Qwerty */ | ||||
|     {KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_NO,   KC_Y,    KC_U,    KC_I,    KC_O,    KC_P   }, | ||||
|     {KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_NO,   KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN}, | ||||
|     {SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_DEL), KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH)  }, | ||||
|     {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT} | ||||
|   }, | ||||
|   [_CM] = { /* Colemak */ | ||||
|     {KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_NO,   KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN}, | ||||
|     {KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_NO,   KC_H,    KC_N,    KC_E,    KC_I,    KC_O   }, | ||||
|     {SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_DEL), KC_K, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH)  }, | ||||
|     {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT} | ||||
|   }, | ||||
|   [_L1] = { /* LAYER 1 */ | ||||
|     {KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_NO,   KC_6,    KC_7,    KC_8,    KC_9,    KC_0   }, | ||||
|     {KC_TAB,  KC_INS,  KC_UP,   KC_DEL,  KC_HOME, KC_NO,   KC_PGUP, KC_MUTE, KC_VOLD, KC_VOLU, KC_EQL }, | ||||
|     {KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END,  KC_LCTL, KC_PGDN, KC_MPRV, KC_MPLY, KC_MNXT, KC_BSLS}, | ||||
|     {KC_TRNS, KC_GRV,  KC_LGUI, KC_TRNS, KC_DEL,  KC_LALT, KC_SPC,  KC_TRNS, KC_LBRC, KC_RBRC, KC_ENT } | ||||
|   }, | ||||
|   [_L2] = { /* LAYER 2 */ | ||||
|     {KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_NO,   KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN}, | ||||
|     {KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_NO,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10 }, | ||||
|     {KC_TRNS, KC_TRNS, DVORAK,  QWERTY,  COLEMAK, KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11,  KC_F12 }, | ||||
|     {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC,  KC_TRNS, KC_TRNS, KC_TRNS, RESET  } | ||||
|   } | ||||
| }; | ||||
| 
 | ||||
| const uint16_t PROGMEM fn_actions[] = { | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| void persistant_default_layer_set(uint16_t default_layer) { | ||||
|   eeconfig_update_default_layer(default_layer); | ||||
|   default_layer_set(default_layer); | ||||
| } | ||||
| 
 | ||||
| const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | ||||
| { | ||||
|       switch(id) { | ||||
|         case _DV: | ||||
|           if (record->event.pressed) { | ||||
|             persistant_default_layer_set(1UL<<_DV); | ||||
|           } | ||||
|           break; | ||||
|         case _QW: | ||||
|           if (record->event.pressed) { | ||||
|             persistant_default_layer_set(1UL<<_QW); | ||||
|           } | ||||
|           break; | ||||
|         case _CM: | ||||
|           if (record->event.pressed) { | ||||
|             persistant_default_layer_set(1UL<<_CM); | ||||
|           } | ||||
|           break; | ||||
|       } | ||||
|     return MACRO_NONE; | ||||
| }; | ||||
| @ -0,0 +1,5 @@ | ||||
| # skullY's Clueboard Layout | ||||
| 
 | ||||
| This layout is what I (@skullydazed) use on my personal Clueboards. I mostly use it for programming, CAD, and general typing. | ||||
| 
 | ||||
| The most notable change from the default layout is putting Ctrl on the Capslock key. I also swap Alt and Cmd because I mostly use a Mac day to day. | ||||
| @ -1,4 +1,97 @@ | ||||
| Clueboard keyboard firmware | ||||
| ====================== | ||||
| 
 | ||||
| TODO: to be updated. | ||||
| DIY/Assembled compact 66% keyboard by [Clueboard](http://clueboard.co). | ||||
| 
 | ||||
| For the full Quantum Mechanical Keyboard feature list, see [the parent readme.md](/readme.md). | ||||
| 
 | ||||
| ## First Time Setup | ||||
| 
 | ||||
| Download or clone the whole firmware and navigate to the keyboards/clueboard directory. Once your dev env is setup, you'll be able to generate the default .hex: | ||||
| 
 | ||||
| ``` | ||||
| $ make | ||||
| ``` | ||||
| 
 | ||||
| You will see a lot of output and if everything worked correctly you will see something similar to this: | ||||
| 
 | ||||
| ``` | ||||
| Size after: | ||||
|    text	   data	    bss	    dec	    hex	filename | ||||
|       0	  19992	      0	  19992	   4e18	clueboard_rev2_default.hex | ||||
| ``` | ||||
| 
 | ||||
| At this point you can press RESET on your Clueboard and flash your keyboard with this command: | ||||
| 
 | ||||
| ``` | ||||
| $ make dfu | ||||
| ``` | ||||
| 
 | ||||
| If you would like to use one of the alternative keymaps, or create your own, see below. | ||||
| 
 | ||||
| ## Clueboard 1.0 | ||||
| 
 | ||||
| If you have a first generation Clueboard (one with a black PCB) you will need to use the revision 1 code. To do so add `SUBPROJECT=rev1` to your make command, like this: | ||||
| 
 | ||||
| ``` | ||||
| $ make SUBPROJECT=rev1 | ||||
| ``` | ||||
| 
 | ||||
| And when flashing your keyboard: | ||||
| 
 | ||||
| ``` | ||||
| $ make SUBPROJECT=rev1 dfu | ||||
| ``` | ||||
| 
 | ||||
| If you are flashing an alternative layout to your rev1, include both `SUBPROJECT=rev1` and `KEYMAP=<keymap>` in your command, for example when flashing max: | ||||
| 
 | ||||
| ``` | ||||
| $ make SUBPROJECT=rev1 KEYMAP=max dfu | ||||
| ``` | ||||
| 
 | ||||
| ## Alternate Keymaps | ||||
| 
 | ||||
| There are many alternative and user-contributed layouts available in the [keymaps/](keymaps/) directory. To compile and flash an alternative you will want to add `KEYMAP=<keymap>` to your command: | ||||
| 
 | ||||
| ``` | ||||
| $ make KEYMAP=skully | ||||
| ``` | ||||
| 
 | ||||
| And when flashing your keyboard, put `KEYMAP=<keymap>` between "make" and "dfu": | ||||
| 
 | ||||
| ``` | ||||
| $ make KEYMAP=skully dfu | ||||
| ``` | ||||
| 
 | ||||
| ### Notable Layouts | ||||
| 
 | ||||
| These layouts are notable for one reason or another. If you are looking for ideas or inspiration you should look at these first: | ||||
| 
 | ||||
| * [keymaps/default](keymaps/default) - The default Clueboard layout | ||||
| * [keymaps/max](keymaps/max) - A maximised layout that makes use of every key and feature of the Clueboard 2.0 PCB. | ||||
| * [keymaps/skully](keymaps/skully) - The layout that @skullydazed uses on his own Clueboards. | ||||
| 
 | ||||
| ## Create Your Own Keymap | ||||
| 
 | ||||
| There are a lot of possibilities when creating your own keymap, and the primary documentation for doing that is [Customizing Your Keymap](/readme.md##customizing-your-keymap) in the main readme.md. As a way to get started, here is the procedure I recommend: | ||||
| 
 | ||||
| * Copy `[keymaps/default](keymaps/default/)` to `keymaps/<your_layout>`. | ||||
| * Compile the firmware (`$ make KEYMAP=<your_layout>`) | ||||
| * Flash the firmware (`$ make KEYMAP=<your_layout> dfu`) | ||||
| * Make sure everything works like the default keyboard | ||||
| * Modify `keymaps/<your_layout>/readme.md` to tell others about your layout. | ||||
| * Modify `keymaps/<your_layout>/keymap.c` to reflect your desired layout. | ||||
| * Compile your new custom firmware (`$ make KEYMAP=<your_layout>`) | ||||
| ** If you have warnings you may flash without fixing them, but something may not work right. | ||||
| ** If you have any errors you must fix them before continuing. | ||||
| * Flash the firmware (`$ make KEYMAP=<your_layout> dfu`) | ||||
| 
 | ||||
| ## Share Your Keymap | ||||
| 
 | ||||
| Got your layout dialed in? Please share it with the world so we can benefit from your work! Simply submit a pull request with your layout and we'll include it in the official repository. Please use the following guidelines when putting together your pull request: | ||||
| 
 | ||||
| * Include a readme.md that states what your primary keyboard use is, how your layout differs from the default, and highlights anything you think makes your layout particularly great. | ||||
| * If your layout requires certain features (EG, RGB underlight or backlighting) ensure you have a Makefile and config.h that reflects that | ||||
| * If your layout requires special hardware to be added, please describe that in the readme.md | ||||
| 
 | ||||
| TODO: Write up or link quick how-to on creating and submitting a PR. (Pull requests accepted. :) | ||||
|  | ||||
| @ -1,63 +0,0 @@ | ||||
| #include "clueboard2.h" | ||||
| 
 | ||||
| void matrix_init_kb(void) { | ||||
| 	// put your keyboard start-up code here
 | ||||
| 	// runs once when the firmware starts up
 | ||||
| 	matrix_init_user(); | ||||
| 	led_init_ports(); | ||||
| 
 | ||||
|     // JTAG disable for PORT F. write JTD bit twice within four cycles.
 | ||||
|     MCUCR |= (1<<JTD); | ||||
|     MCUCR |= (1<<JTD); | ||||
| }; | ||||
| 
 | ||||
| void led_init_ports() { | ||||
|     // * Set our LED pins as output
 | ||||
|     DDRB |= (1<<4); | ||||
| } | ||||
| 
 | ||||
| void led_set_kb(uint8_t usb_led) { | ||||
|     if (usb_led & (1<<USB_LED_CAPS_LOCK)) { | ||||
|         // Turn capslock on
 | ||||
|         PORTB |= (1<<4); | ||||
|     } else { | ||||
|         // Turn capslock off
 | ||||
|         PORTB &= ~(1<<4); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| /* Clueboard 2.0 LED locations:
 | ||||
|  * | ||||
|  * Capslock: B4, pull high to turn on | ||||
|  * LCtrl: Shared with Capslock, DO NOT INSTALL LED'S IN BOTH | ||||
|  * Page Up: B7, pull high to turn on | ||||
|  * Escape: D6, pull high to turn on | ||||
|  * Arrows: D4, pull high to turn on | ||||
|  */ | ||||
| 
 | ||||
| void backlight_init_ports(void) { | ||||
|     print("init_backlight_pin()\n"); | ||||
|     // Set our LED pins as output
 | ||||
|     DDRD |= (1<<6); // Esc
 | ||||
|     DDRB |= (1<<7); // Page Up
 | ||||
|     DDRD |= (1<<4); // Arrows
 | ||||
| 
 | ||||
|     // Set our LED pins low
 | ||||
|     PORTD &= ~(1<<6); // Esc
 | ||||
|     PORTB &= ~(1<<7); // Page Up
 | ||||
|     PORTD &= ~(1<<4); // Arrows
 | ||||
| } | ||||
| 
 | ||||
| void backlight_set(uint8_t level) { | ||||
|     if ( level == 0 ) { | ||||
|         // Turn off light
 | ||||
|         PORTD |= (1<<6); // Esc
 | ||||
|         PORTB |= (1<<7); // Page Up
 | ||||
|         PORTD |= (1<<4); // Arrows
 | ||||
|     } else { | ||||
|         // Turn on light
 | ||||
|         PORTD &= ~(1<<6); // Esc
 | ||||
|         PORTB &= ~(1<<7); // Page Up
 | ||||
|         PORTD &= ~(1<<4); // Arrows
 | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,98 @@ | ||||
| #include "cluecard.h" | ||||
| #define BL_RED OCR1B | ||||
| #define BL_GREEN OCR1A | ||||
| #define BL_BLUE OCR1C | ||||
| 
 | ||||
| void matrix_init_kb(void) { | ||||
| 	// put your keyboard start-up code here
 | ||||
| 	// runs once when the firmware starts up
 | ||||
| 
 | ||||
| 	matrix_init_user(); | ||||
| } | ||||
| 
 | ||||
| void matrix_scan_kb(void) { | ||||
| 	// put your looping keyboard code here
 | ||||
| 	// runs every cycle (a lot)
 | ||||
| 
 | ||||
| 	matrix_scan_user(); | ||||
| } | ||||
| 
 | ||||
| bool process_record_kb(uint16_t keycode, keyrecord_t *record) { | ||||
| 	// put your per-action keyboard code here
 | ||||
| 	// runs for every action, just before processing by the firmware
 | ||||
| 
 | ||||
| 	return process_record_user(keycode, record); | ||||
| } | ||||
| 
 | ||||
| void led_set_kb(uint8_t usb_led) { | ||||
| 	// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
 | ||||
| 
 | ||||
| 	led_set_user(usb_led); | ||||
| } | ||||
| 
 | ||||
| void backlight_init_ports(void) | ||||
| { | ||||
| 	// Set B5, B6, and B7 as output
 | ||||
| 	DDRB |= (1<<7)|(1<<6)|(1<<5); | ||||
| 
 | ||||
| 	// Setup PWM
 | ||||
| 	ICR1 = 0xFFFF; | ||||
| 	TCCR1A = 0b10101010; | ||||
| 	TCCR1B = 0b00011001; | ||||
| 
 | ||||
| 	BL_RED = 0xFFFF; | ||||
| 	BL_GREEN = 0xFFFF; | ||||
| 	BL_BLUE = 0xFFFF; | ||||
| } | ||||
| 
 | ||||
| void backlight_set(uint8_t level) | ||||
| { | ||||
| 	// Set the RGB color
 | ||||
| 	switch (level) | ||||
| 	{ | ||||
| 	case 0: | ||||
| 		// Off
 | ||||
| 		BL_RED = 0xFFFF; | ||||
| 		BL_GREEN = 0xFFFF; | ||||
| 		BL_BLUE = 0xFFFF; | ||||
| 		break; | ||||
| 	case 1: | ||||
| 		// Red
 | ||||
| 		BL_RED = 0x0000; | ||||
| 		BL_GREEN = 0xFFFF; | ||||
| 		BL_BLUE = 0xFFFF; | ||||
| 		break; | ||||
| 	case 2: | ||||
| 		// Green
 | ||||
| 		BL_RED = 0xFFFF; | ||||
| 		BL_GREEN = 0x0000; | ||||
| 		BL_BLUE = 0xFFFF; | ||||
| 		break; | ||||
| 	case 3: | ||||
| 		// Blue
 | ||||
| 		BL_RED = 0xFFFF; | ||||
| 		BL_GREEN = 0xFFFF; | ||||
| 		BL_BLUE = 0x0000; | ||||
| 		break; | ||||
| 	case 4: | ||||
| 		// Magenta
 | ||||
| 		BL_RED = 0x4000; | ||||
| 		BL_GREEN = 0x4000; | ||||
| 		BL_BLUE = 0x4000; | ||||
| 		break; | ||||
| 	case 5: | ||||
| 		// Purple
 | ||||
| 		BL_RED = 0x0000; | ||||
| 		BL_GREEN = 0xFFFF; | ||||
| 		BL_BLUE = 0x0000; | ||||
| 		break; | ||||
| 	case 6: | ||||
| 		// Yellow
 | ||||
| 		BL_RED = 0x0000; | ||||
| 		BL_GREEN = 0x0000; | ||||
| 		BL_BLUE = 0xFFFF; | ||||
| 		break; | ||||
| 	default: | ||||
| 		xprintf("Unknown level: %d\n", level); | ||||
| 	} | ||||
| } | ||||
| @ -0,0 +1,22 @@ | ||||
| #ifndef CLUECARD_H | ||||
| #define CLUECARD_H | ||||
| 
 | ||||
| #include "quantum.h" | ||||
| 
 | ||||
| // This a shortcut to help you visually see your layout.
 | ||||
| // The first section contains all of the arguements
 | ||||
| // The second converts the arguments into a two-dimensional array
 | ||||
| #define KEYMAP( \ | ||||
| 	k00, k01, k02, \ | ||||
| 	k10, k12, \ | ||||
| 	k20, k21, k22, \ | ||||
| 	k11, \ | ||||
| 	k30, k31, k32 \ | ||||
| ) { \ | ||||
| 	{ k00, k01, k02, }, \ | ||||
| 	{ k10, k11, k12, }, \ | ||||
| 	{ k20, k21, k22, }, \ | ||||
| 	{ k30, k31, k32, } \ | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| @ -0,0 +1,167 @@ | ||||
| /*
 | ||||
| Copyright 2012 Jun Wako <wakojun@gmail.com> | ||||
| 
 | ||||
| This program is free software: you can redistribute it and/or modify | ||||
| it under the terms of the GNU General Public License as published by | ||||
| the Free Software Foundation, either version 2 of the License, or | ||||
| (at your option) any later version. | ||||
| 
 | ||||
| This program is distributed in the hope that it will be useful, | ||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| GNU General Public License for more details. | ||||
| 
 | ||||
| You should have received a copy of the GNU General Public License | ||||
| along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef CONFIG_H | ||||
| #define CONFIG_H | ||||
| 
 | ||||
| #include "config_common.h" | ||||
| 
 | ||||
| /* USB Device descriptor parameter */ | ||||
| #define VENDOR_ID       0xC1ED | ||||
| #define PRODUCT_ID      0x2330 | ||||
| #define DEVICE_VER      0x0001 | ||||
| #define MANUFACTURER    Clueboard | ||||
| #define PRODUCT         ATMEGA32U4 Firmware Dev Kit | ||||
| #define DESCRIPTION     A small board to help you hack on QMK. | ||||
| 
 | ||||
| /* key matrix size */ | ||||
| #define MATRIX_ROWS 4 | ||||
| #define MATRIX_COLS 3 | ||||
| 
 | ||||
| /*
 | ||||
|  * Keyboard Matrix Assignments | ||||
|  * | ||||
|  * Change this to how you wired your keyboard | ||||
|  * COLS: AVR pins used for columns, left to right | ||||
|  * ROWS: AVR pins used for rows, top to bottom | ||||
|  * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) | ||||
|  *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) | ||||
|  * | ||||
| */ | ||||
| #define MATRIX_ROW_PINS { F0, F5, F4, B4 } | ||||
| #define MATRIX_COL_PINS { F1, F7, F6 } | ||||
| #define UNUSED_PINS | ||||
| 
 | ||||
| /* COL2ROW or ROW2COL */ | ||||
| #define DIODE_DIRECTION ROW2COL | ||||
|   | ||||
| /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ | ||||
| #define DEBOUNCING_DELAY 20 | ||||
| 
 | ||||
| /* define if matrix has ghost (lacks anti-ghosting diodes) */ | ||||
| //#define MATRIX_HAS_GHOST
 | ||||
| 
 | ||||
| /* number of backlight levels */ | ||||
| #define BACKLIGHT_LEVELS 6 | ||||
| 
 | ||||
| /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ | ||||
| //#define LOCKING_SUPPORT_ENABLE
 | ||||
| /* Locking resynchronize hack */ | ||||
| //#define LOCKING_RESYNC_ENABLE
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Force NKRO | ||||
|  * | ||||
|  * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved | ||||
|  * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the | ||||
|  * makefile for this to work.) | ||||
|  * | ||||
|  * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) | ||||
|  * until the next keyboard reset. | ||||
|  * | ||||
|  * NKRO may prevent your keystrokes from being detected in the BIOS, but it is | ||||
|  * fully operational during normal computer usage. | ||||
|  * | ||||
|  * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) | ||||
|  * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by | ||||
|  * bootmagic, NKRO mode will always be enabled until it is toggled again during a | ||||
|  * power-up. | ||||
|  * | ||||
|  */ | ||||
| //#define FORCE_NKRO
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Magic Key Options | ||||
|  * | ||||
|  * Magic keys are hotkey commands that allow control over firmware functions of | ||||
|  * the keyboard. They are best used in combination with the HID Listen program, | ||||
|  * found here: https://www.pjrc.com/teensy/hid_listen.html
 | ||||
|  * | ||||
|  * The options below allow the magic key functionality to be changed. This is | ||||
|  * useful if your keyboard/keypad is missing keys and you want magic key support. | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* key combination for magic key command */ | ||||
| #define IS_COMMAND() ( \ | ||||
| 	keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ | ||||
| ) | ||||
| 
 | ||||
| /* control how magic key switches layers */ | ||||
| //#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
 | ||||
| //#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
 | ||||
| //#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
 | ||||
| 
 | ||||
| /* override magic key keymap */ | ||||
| //#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
 | ||||
| //#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
 | ||||
| //#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
 | ||||
| //#define MAGIC_KEY_HELP1          H
 | ||||
| //#define MAGIC_KEY_HELP2          SLASH
 | ||||
| //#define MAGIC_KEY_DEBUG          D
 | ||||
| //#define MAGIC_KEY_DEBUG_MATRIX   X
 | ||||
| //#define MAGIC_KEY_DEBUG_KBD      K
 | ||||
| //#define MAGIC_KEY_DEBUG_MOUSE    M
 | ||||
| //#define MAGIC_KEY_VERSION        V
 | ||||
| //#define MAGIC_KEY_STATUS         S
 | ||||
| //#define MAGIC_KEY_CONSOLE        C
 | ||||
| //#define MAGIC_KEY_LAYER0_ALT1    ESC
 | ||||
| //#define MAGIC_KEY_LAYER0_ALT2    GRAVE
 | ||||
| //#define MAGIC_KEY_LAYER0         0
 | ||||
| //#define MAGIC_KEY_LAYER1         1
 | ||||
| //#define MAGIC_KEY_LAYER2         2
 | ||||
| //#define MAGIC_KEY_LAYER3         3
 | ||||
| //#define MAGIC_KEY_LAYER4         4
 | ||||
| //#define MAGIC_KEY_LAYER5         5
 | ||||
| //#define MAGIC_KEY_LAYER6         6
 | ||||
| //#define MAGIC_KEY_LAYER7         7
 | ||||
| //#define MAGIC_KEY_LAYER8         8
 | ||||
| //#define MAGIC_KEY_LAYER9         9
 | ||||
| //#define MAGIC_KEY_BOOTLOADER     PAUSE
 | ||||
| //#define MAGIC_KEY_LOCK           CAPS
 | ||||
| //#define MAGIC_KEY_EEPROM         E
 | ||||
| //#define MAGIC_KEY_NKRO           N
 | ||||
| //#define MAGIC_KEY_SLEEP_LED      Z
 | ||||
| 
 | ||||
| /* Underlight configuration
 | ||||
|  */ | ||||
| #define RGB_DI_PIN E6 | ||||
| //#define RGBLIGHT_TIMER
 | ||||
| #define RGBLED_NUM 4     // Number of LEDs
 | ||||
| #define RGBLIGHT_HUE_STEP 10 | ||||
| #define RGBLIGHT_SAT_STEP 17 | ||||
| #define RGBLIGHT_VAL_STEP 17 | ||||
| 
 | ||||
| /*
 | ||||
|  * Feature disable options | ||||
|  *  These options are also useful to firmware size reduction. | ||||
|  */ | ||||
| 
 | ||||
| /* disable debug print */ | ||||
| //#define NO_DEBUG
 | ||||
| 
 | ||||
| /* disable print */ | ||||
| //#define NO_PRINT
 | ||||
| 
 | ||||
| /* disable action features */ | ||||
| //#define NO_ACTION_LAYER
 | ||||
| //#define NO_ACTION_TAPPING
 | ||||
| //#define NO_ACTION_ONESHOT
 | ||||
| //#define NO_ACTION_MACRO
 | ||||
| //#define NO_ACTION_FUNCTION
 | ||||
| 
 | ||||
| #endif | ||||
| @ -0,0 +1,21 @@ | ||||
| # Build Options
 | ||||
| #   change to "no" to disable the options, or define them in the Makefile in
 | ||||
| #   the appropriate keymap folder that will get included automatically
 | ||||
| #
 | ||||
| BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000) | ||||
| MOUSEKEY_ENABLE = no       # Mouse keys(+4700) | ||||
| EXTRAKEY_ENABLE = no       # Audio control and System control(+450) | ||||
| CONSOLE_ENABLE = yes         # Console for debug(+400) | ||||
| COMMAND_ENABLE = yes        # Commands for debug and configuration | ||||
| NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work | ||||
| BACKLIGHT_ENABLE = yes       # Enable keyboard backlight functionality | ||||
| MIDI_ENABLE = no            # MIDI controls | ||||
| AUDIO_ENABLE = yes           # Audio output on port C6 | ||||
| UNICODE_ENABLE = no         # Unicode | ||||
| BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID | ||||
| RGBLIGHT_ENABLE = yes        # Enable WS2812 RGB underlight. | ||||
| SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend | ||||
| 
 | ||||
| ifndef QUANTUM_DIR | ||||
| 	include ../../../../Makefile | ||||
| endif | ||||
| @ -0,0 +1,8 @@ | ||||
| #ifndef CONFIG_USER_H | ||||
| #define CONFIG_USER_H | ||||
| 
 | ||||
| #include "../../config.h" | ||||
| 
 | ||||
| // place overrides here
 | ||||
| 
 | ||||
| #endif | ||||
| @ -0,0 +1,63 @@ | ||||
| #include "cluecard.h" | ||||
| #ifdef AUDIO_ENABLE | ||||
| 	#include "audio.h" | ||||
| #endif | ||||
| 
 | ||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
| 	[0] = KEYMAP( | ||||
| 		RGB_TOG,        RGB_SAI,        RGB_VAI, \ | ||||
| 		        RGB_HUD,        RGB_HUI,         \ | ||||
| 		RGB_MOD,        RGB_SAD,        RGB_VAD, \ | ||||
| 		BL_STEP,                                 \ | ||||
| 		F(0),   F(1),   F(2)                     \ | ||||
| 	) | ||||
| }; | ||||
| 
 | ||||
| #ifdef AUDIO_ENABLE | ||||
| 
 | ||||
| float tone_startup[][2] = SONG(STARTUP_SOUND); | ||||
| float tone_qwerty[][2] = SONG(QWERTY_SOUND); | ||||
| float tone_dvorak[][2] = SONG(DVORAK_SOUND); | ||||
| float tone_colemak[][2] = SONG(COLEMAK_SOUND); | ||||
| float tone_plover[][2] = SONG(PLOVER_SOUND); | ||||
| float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); | ||||
| float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); | ||||
| 
 | ||||
| float tone_goodbye[][2] = SONG(GOODBYE_SOUND); | ||||
| #endif | ||||
| 
 | ||||
| const uint16_t PROGMEM fn_actions[] = { | ||||
| 	[0] = ACTION_FUNCTION(0), | ||||
| 	[1] = ACTION_FUNCTION(1), | ||||
| 	[2] = ACTION_FUNCTION(2) | ||||
| }; | ||||
| 
 | ||||
| void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { | ||||
| 	if (record->event.pressed) { | ||||
| 		switch (id) { | ||||
| 			case 0: | ||||
| 				PLAY_NOTE_ARRAY(tone_startup, false, 0); | ||||
| 				break; | ||||
| 			case 1: | ||||
| 				PLAY_NOTE_ARRAY(music_scale, false, 0); | ||||
| 				break; | ||||
| 			case 2: | ||||
| 				PLAY_NOTE_ARRAY(tone_goodbye, false, 0); | ||||
| 				break; | ||||
| 		} | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| void matrix_init_user(void) { | ||||
| } | ||||
| 
 | ||||
| void matrix_scan_user(void) { | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||||
|   return true; | ||||
| } | ||||
| 
 | ||||
| void led_set_user(uint8_t usb_led) { | ||||
| } | ||||
| @ -0,0 +1 @@ | ||||
| # The default keymap for cluecard | ||||
| @ -0,0 +1,28 @@ | ||||
| cluecard keyboard firmware | ||||
| ====================== | ||||
| 
 | ||||
| ## Quantum MK Firmware | ||||
| 
 | ||||
| For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). | ||||
| 
 | ||||
| ## Building | ||||
| 
 | ||||
| Download or clone the whole firmware and navigate to the keyboards/cluecard folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. | ||||
| 
 | ||||
| Depending on which keymap you would like to use, you will have to compile slightly differently. | ||||
| 
 | ||||
| ### Default | ||||
| 
 | ||||
| To build with the default keymap, simply run `make`. | ||||
| 
 | ||||
| ### Other Keymaps | ||||
| 
 | ||||
| Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. | ||||
| 
 | ||||
| To build the firmware binary hex file with a keymap just do `make` with `keymap` option like: | ||||
| 
 | ||||
| ``` | ||||
| $ make keymap=[default|jack|<name>] | ||||
| ``` | ||||
| 
 | ||||
| Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` | ||||
| @ -0,0 +1,314 @@ | ||||
| // This is the canonical layout file for the Quantum project. If you want to add another keyboard,
 | ||||
| // this is the style you want to emulate.
 | ||||
| 
 | ||||
| #include "planck.h" | ||||
| #include "action_layer.h" | ||||
| #ifdef AUDIO_ENABLE | ||||
|   #include "audio.h" | ||||
| #endif | ||||
| #include "eeconfig.h" | ||||
| 
 | ||||
| extern keymap_config_t keymap_config; | ||||
| 
 | ||||
| // Each layer gets a name for readability, which is then used in the keymap matrix below.
 | ||||
| // The underscores don't mean anything - you can have a layer called STUFF or any other name.
 | ||||
| // Layer names don't all need to be of the same length, obviously, and you can also skip them
 | ||||
| // entirely and just use numbers.
 | ||||
| #define _QWERTY 0 | ||||
| #define _COLEMAK 1 | ||||
| #define _DVORAK 2 | ||||
| #define _LOWER 3 | ||||
| #define _RAISE 4 | ||||
| #define _PLOVER 5 | ||||
| #define _ADJUST 16 | ||||
| 
 | ||||
| enum planck_keycodes { | ||||
|   QWERTY = SAFE_RANGE, | ||||
|   COLEMAK, | ||||
|   DVORAK, | ||||
|   PLOVER, | ||||
|   LOWER, | ||||
|   RAISE, | ||||
|   BACKLIT, | ||||
|   EXT_PLV | ||||
| }; | ||||
| 
 | ||||
| // Fillers to make layering more clear
 | ||||
| #define _______ KC_TRNS | ||||
| #define XXXXXXX KC_NO | ||||
| 
 | ||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
| 
 | ||||
| /* Qwerty
 | ||||
|  * ,-----------------------------------------------------------------------------------. | ||||
|  * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp | | ||||
|  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||
|  * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   | | ||||
|  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||
|  * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter | | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right | | ||||
|  * `-----------------------------------------------------------------------------------' | ||||
|  */ | ||||
| [_QWERTY] = { | ||||
|   {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC}, | ||||
|   {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT}, | ||||
|   {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT }, | ||||
|   {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT} | ||||
| }, | ||||
| 
 | ||||
| /* Colemak
 | ||||
|  * ,-----------------------------------------------------------------------------------. | ||||
|  * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp | | ||||
|  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||
|  * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   | | ||||
|  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||
|  * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter | | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right | | ||||
|  * `-----------------------------------------------------------------------------------' | ||||
|  */ | ||||
| [_COLEMAK] = { | ||||
|   {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC}, | ||||
|   {KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT}, | ||||
|   {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT }, | ||||
|   {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT} | ||||
| }, | ||||
| 
 | ||||
| /* Dvorak
 | ||||
|  * ,-----------------------------------------------------------------------------------. | ||||
|  * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  |  /   | | ||||
|  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||
|  * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  -   | | ||||
|  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||
|  * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  | Shift| | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * | Ctrl | Alt  | Left |Right |Lower | Bksp |Space |Raise |  Up  | Down |  GUI |Enter | | ||||
|  * `-----------------------------------------------------------------------------------' | ||||
|  */ | ||||
| [_DVORAK] = { | ||||
|   {KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_SLSH}, | ||||
|   {KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_MINS}, | ||||
|   {KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    SFT_T(KC_ENT)}, | ||||
|   {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER,   KC_BSPC, KC_SPC,  RAISE,   KC_UP,   KC_DOWN, KC_RGUI, KC_ENT } | ||||
| }, | ||||
| 
 | ||||
| /* Lower
 | ||||
|  * ,-----------------------------------------------------------------------------------. | ||||
|  * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |      | | ||||
|  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||
|  * | Caps |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   | | ||||
|  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||
|  * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      | Mute | Vol- | Vol+ |      | | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * | Brite|      | Home |  End |      |  Del |  Ins |      | PgUp | PgDN |      |Enter | | ||||
|  * `-----------------------------------------------------------------------------------' | ||||
|  */ | ||||
| [_LOWER] = { | ||||
|   {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______}, | ||||
|   {KC_CAPS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, | ||||
|   {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_MUTE, KC_VOLD, KC_VOLU, _______, _______}, | ||||
|   {BACKLIT, _______, KC_HOME, KC_END,  _______, KC_DEL,  KC_INS,  _______, KC_PGUP, KC_PGDN, _______, _______} | ||||
| }, | ||||
| 
 | ||||
| /* Raise
 | ||||
|  * ,-----------------------------------------------------------------------------------. | ||||
|  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |      | | ||||
|  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||
|  * | Caps |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   | | ||||
|  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||
|  * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      | Prev | Play | Next |      | | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * | Brite|      | Home |  End |      |  Del |  Ins |      | PgUp | PgDN |      |Enter | | ||||
|  * `-----------------------------------------------------------------------------------' | ||||
|  */ | ||||
| [_RAISE] = { | ||||
|   {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______}, | ||||
|   {KC_CAPS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS}, | ||||
|   {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_MPRV, KC_MPLY, KC_MNXT, _______, _______}, | ||||
|   {BACKLIT, _______, KC_HOME, KC_END,  _______, KC_DEL,  KC_INS,  _______, KC_PGUP, KC_PGDN, _______, _______} | ||||
| }, | ||||
| 
 | ||||
| /* Plover layer (http://opensteno.org)
 | ||||
|  * ,-----------------------------------------------------------------------------------. | ||||
|  * |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  | | ||||
|  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||
|  * |      |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  | | ||||
|  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||
|  * |TogOut|   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  | | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * | Exit |      |      |   A  |   O  |             |   E  |   U  |      |      |      | | ||||
|  * `-----------------------------------------------------------------------------------' | ||||
|  */ | ||||
| 
 | ||||
| [_PLOVER] = { | ||||
|   {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   }, | ||||
|   {XXXXXXX, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC}, | ||||
|   {XXXXXXX, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT}, | ||||
|   {EXT_PLV, XXXXXXX, XXXXXXX, KC_C,    KC_V,    XXXXXXX, XXXXXXX, KC_N,    KC_M,    XXXXXXX, XXXXXXX, XXXXXXX} | ||||
| }, | ||||
| 
 | ||||
| /* Adjust (Lower + Raise)
 | ||||
|  * ,-----------------------------------------------------------------------------------. | ||||
|  * |      | Reset|      |      |      |      |      |      |      |      |      |  Del | | ||||
|  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||
|  * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover|      | | ||||
|  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||
|  * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      | | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * |      |      |      |      |      |             |      |      |      |      |      | | ||||
|  * `-----------------------------------------------------------------------------------' | ||||
|  */ | ||||
| [_ADJUST] = { | ||||
|   {_______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, | ||||
|   {_______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  PLOVER,  _______}, | ||||
|   {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______}, | ||||
|   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| #ifdef AUDIO_ENABLE | ||||
| 
 | ||||
| float tone_startup[][2]    = SONG(STARTUP_SOUND); | ||||
| float tone_qwerty[][2]     = SONG(QWERTY_SOUND); | ||||
| float tone_dvorak[][2]     = SONG(DVORAK_SOUND); | ||||
| float tone_colemak[][2]    = SONG(COLEMAK_SOUND); | ||||
| float tone_plover[][2]     = SONG(PLOVER_SOUND); | ||||
| float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND); | ||||
| float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND); | ||||
| 
 | ||||
| float tone_goodbye[][2] = SONG(GOODBYE_SOUND); | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| void persistant_default_layer_set(uint16_t default_layer) { | ||||
|   eeconfig_update_default_layer(default_layer); | ||||
|   default_layer_set(default_layer); | ||||
| } | ||||
| 
 | ||||
| bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||||
|   switch (keycode) { | ||||
|     case QWERTY: | ||||
|       if (record->event.pressed) { | ||||
|         #ifdef AUDIO_ENABLE | ||||
|           PLAY_NOTE_ARRAY(tone_qwerty, false, 0); | ||||
|         #endif | ||||
|         persistant_default_layer_set(1UL<<_QWERTY); | ||||
|       } | ||||
|       return false; | ||||
|       break; | ||||
|     case COLEMAK: | ||||
|       if (record->event.pressed) { | ||||
|         #ifdef AUDIO_ENABLE | ||||
|           PLAY_NOTE_ARRAY(tone_colemak, false, 0); | ||||
|         #endif | ||||
|         persistant_default_layer_set(1UL<<_COLEMAK); | ||||
|       } | ||||
|       return false; | ||||
|       break; | ||||
|     case DVORAK: | ||||
|       if (record->event.pressed) { | ||||
|         #ifdef AUDIO_ENABLE | ||||
|           PLAY_NOTE_ARRAY(tone_dvorak, false, 0); | ||||
|         #endif | ||||
|         persistant_default_layer_set(1UL<<_DVORAK); | ||||
|       } | ||||
|       return false; | ||||
|       break; | ||||
|     case LOWER: | ||||
|       if (record->event.pressed) { | ||||
|         layer_on(_LOWER); | ||||
|         update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||||
|       } else { | ||||
|         layer_off(_LOWER); | ||||
|         update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||||
|       } | ||||
|       return false; | ||||
|       break; | ||||
|     case RAISE: | ||||
|       if (record->event.pressed) { | ||||
|         layer_on(_RAISE); | ||||
|         update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||||
|       } else { | ||||
|         layer_off(_RAISE); | ||||
|         update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||||
|       } | ||||
|       return false; | ||||
|       break; | ||||
|     case BACKLIT: | ||||
|       if (record->event.pressed) { | ||||
|         register_code(KC_RSFT); | ||||
|         #ifdef BACKLIGHT_ENABLE | ||||
|           backlight_step(); | ||||
|         #endif | ||||
|       } else { | ||||
|         unregister_code(KC_RSFT); | ||||
|       } | ||||
|       return false; | ||||
|       break; | ||||
|     case PLOVER: | ||||
|       if (record->event.pressed) { | ||||
|         #ifdef AUDIO_ENABLE | ||||
|           stop_all_notes(); | ||||
|           PLAY_NOTE_ARRAY(tone_plover, false, 0); | ||||
|         #endif | ||||
|         layer_off(_RAISE); | ||||
|         layer_off(_LOWER); | ||||
|         layer_off(_ADJUST); | ||||
|         layer_on(_PLOVER); | ||||
|         if (!eeconfig_is_enabled()) { | ||||
|             eeconfig_init(); | ||||
|         } | ||||
|         keymap_config.raw = eeconfig_read_keymap(); | ||||
|         keymap_config.nkro = 1; | ||||
|         eeconfig_update_keymap(keymap_config.raw); | ||||
|       } | ||||
|       return false; | ||||
|       break; | ||||
|     case EXT_PLV: | ||||
|       if (record->event.pressed) { | ||||
|         #ifdef AUDIO_ENABLE | ||||
|           PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); | ||||
|         #endif | ||||
|         layer_off(_PLOVER); | ||||
|       } | ||||
|       return false; | ||||
|       break; | ||||
|   } | ||||
|   return true; | ||||
| } | ||||
| 
 | ||||
| void matrix_init_user(void) { | ||||
|     #ifdef AUDIO_ENABLE | ||||
|         startup_user(); | ||||
|     #endif | ||||
| } | ||||
| 
 | ||||
| #ifdef AUDIO_ENABLE | ||||
| 
 | ||||
| void startup_user() | ||||
| { | ||||
|     _delay_ms(20); // gets rid of tick
 | ||||
|     PLAY_NOTE_ARRAY(tone_startup, false, 0); | ||||
| } | ||||
| 
 | ||||
| void shutdown_user() | ||||
| { | ||||
|     PLAY_NOTE_ARRAY(tone_goodbye, false, 0); | ||||
|     _delay_ms(150); | ||||
|     stop_all_notes(); | ||||
| } | ||||
| 
 | ||||
| void music_on_user(void) | ||||
| { | ||||
|     music_scale_user(); | ||||
| } | ||||
| 
 | ||||
| void music_scale_user(void) | ||||
| { | ||||
|     PLAY_NOTE_ARRAY(music_scale, false, 0); | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| @ -0,0 +1,25 @@ | ||||
| 
 | ||||
| 
 | ||||
| # Build Options
 | ||||
| #   change to "no" to disable the options, or define them in the Makefile in 
 | ||||
| #   the appropriate keymap folder that will get included automatically
 | ||||
| #
 | ||||
| BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000) | ||||
| MOUSEKEY_ENABLE = yes       # Mouse keys(+4700) | ||||
| EXTRAKEY_ENABLE = yes       # Audio control and System control(+450) | ||||
| CONSOLE_ENABLE = no         # Console for debug(+400) | ||||
| COMMAND_ENABLE = yes        # Commands for debug and configuration | ||||
| NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work | ||||
| BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality | ||||
| MIDI_ENABLE = no            # MIDI controls | ||||
| AUDIO_ENABLE = yes           # Audio output on port C6 | ||||
| UNICODE_ENABLE = no         # Unicode | ||||
| BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID | ||||
| RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time. | ||||
| 
 | ||||
| # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 | ||||
| SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend | ||||
| 
 | ||||
| ifndef QUANTUM_DIR | ||||
| 	include ../../../../Makefile | ||||
| endif | ||||
| @ -0,0 +1,342 @@ | ||||
| #include "preonic.h" | ||||
| #include "action_layer.h" | ||||
| #include "eeconfig.h" | ||||
| #ifdef AUDIO_ENABLE | ||||
|   #include "audio.h" | ||||
| #endif | ||||
| 
 | ||||
| // Each layer gets a name for readability, which is then used in the keymap matrix below.
 | ||||
| // The underscores don't mean anything - you can have a layer called STUFF or any other name.
 | ||||
| // Layer names don't all need to be of the same length, obviously, and you can also skip them
 | ||||
| // entirely and just use numbers.
 | ||||
| #define _QWERTY 0 | ||||
| #define _COLEMAK 1 | ||||
| #define _DVORAK 2 | ||||
| #define _LOWER 3 | ||||
| #define _RAISE 4 | ||||
| #define _MUSIC 5 | ||||
| #define _ADJUST 16 | ||||
| 
 | ||||
| // Macro name shortcuts
 | ||||
| #define QWERTY M(_QWERTY) | ||||
| #define COLEMAK M(_COLEMAK) | ||||
| #define DVORAK M(_DVORAK) | ||||
| #define LOWER M(_LOWER) | ||||
| #define RAISE M(_RAISE) | ||||
| #define M_BL 5 | ||||
| #define AUD_OFF M(6) | ||||
| #define AUD_ON M(7) | ||||
| #define MUS_OFF M(8) | ||||
| #define MUS_ON M(9) | ||||
| #define VC_IN M(10) | ||||
| #define VC_DE M(11) | ||||
| 
 | ||||
| // Fillers to make layering more clear
 | ||||
| #define _______ KC_TRNS | ||||
| #define XXXXXXX KC_NO | ||||
| 
 | ||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
| 
 | ||||
| /* Qwerty
 | ||||
|  * ,-----------------------------------------------------------------------------------. | ||||
|  * | Esc  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp | | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Del  | | ||||
|  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||
|  * |  -   |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   | | ||||
|  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||
|  * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  | Shift| | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * | Ctrl |  Alt | Left |Right |Lower |    Space    |Raise |  Up  | Down |  GUI |Enter | | ||||
|  * `-----------------------------------------------------------------------------------' | ||||
|  */ | ||||
| [_QWERTY] = { | ||||
|   {KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC}, | ||||
|   {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_DEL}, | ||||
|   {KC_MINS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT}, | ||||
|   {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT}, | ||||
|   {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_UP,   KC_DOWN, KC_RGUI, KC_ENT } | ||||
| }, | ||||
| 
 | ||||
| /* Colemak
 | ||||
|  * ,-----------------------------------------------------------------------------------. | ||||
|  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp | | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Del  | | ||||
|  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||
|  * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   | | ||||
|  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||
|  * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter | | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right | | ||||
|  * `-----------------------------------------------------------------------------------' | ||||
|  */ | ||||
| [_COLEMAK] = { | ||||
|   {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC}, | ||||
|   {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_DEL}, | ||||
|   {KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT}, | ||||
|   {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT }, | ||||
|   {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT} | ||||
| }, | ||||
| 
 | ||||
| /* Dvorak
 | ||||
|  * ,-----------------------------------------------------------------------------------. | ||||
|  * | Esc  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp | | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  |  /   | | ||||
|  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||
|  * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  -   | | ||||
|  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||
|  * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  | Shift| | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * | Ctrl | Alt  | Left |Right |Lower |    Space    |Raise |  Up  | Down |  GUI |Enter | | ||||
|  * `-----------------------------------------------------------------------------------' | ||||
|  */ | ||||
| [_DVORAK] = { | ||||
|   {KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC}, | ||||
|   {KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_SLSH}, | ||||
|   {KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_MINS}, | ||||
|   {KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_RSFT}, | ||||
|   {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_UP,   KC_DOWN, KC_RGUI, KC_ENT } | ||||
| }, | ||||
| 
 | ||||
| /* Lower
 | ||||
|  * ,-----------------------------------------------------------------------------------. | ||||
|  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp | | ||||
|  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||
|  * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Del  | | ||||
|  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||
|  * | Caps |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   | | ||||
|  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||
|  * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      | Mute | Vol- | Vol+ |      | | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * | Brite|      | Home |  End |      |     Ins     |      | PgUp | PgDN |      |Enter | | ||||
|  * `-----------------------------------------------------------------------------------' | ||||
|  */ | ||||
| [_LOWER] = { | ||||
|   {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC}, | ||||
|   {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, | ||||
|   {KC_CAPS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, | ||||
|   {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_MUTE, KC_VOLD, KC_VOLU, _______, _______}, | ||||
|   {M(M_BL), _______, KC_HOME, KC_END,  _______, KC_INS,  KC_INS,  _______, KC_PGUP, KC_PGDN, _______, _______} | ||||
| }, | ||||
| 
 | ||||
| /* Raise
 | ||||
|  * ,-----------------------------------------------------------------------------------. | ||||
|  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp | | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Del  | | ||||
|  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||
|  * | Caps |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   | | ||||
|  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||
|  * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      | Prev | Play | Next |      | | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * | Brite|      | Home |  End |      |     Ins     |      | PgUp | PgDN |      |Enter | | ||||
|  * `-----------------------------------------------------------------------------------' | ||||
|  */ | ||||
| [_RAISE] = { | ||||
|   {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC}, | ||||
|   {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, | ||||
|   {KC_CAPS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS}, | ||||
|   {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_MPRV, KC_MPLY, KC_MNXT, _______, _______}, | ||||
|   {M(M_BL), _______, KC_HOME, KC_END,  _______, KC_INS,  KC_INS,  _______, KC_PGUP, KC_PGDN, _______, _______} | ||||
| }, | ||||
| 
 | ||||
| /* Music (reserved for process_action_user)
 | ||||
|  * | ||||
|  */ | ||||
| [_MUSIC] = { | ||||
|   {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, | ||||
|   {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, | ||||
|   {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, | ||||
|   {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, | ||||
|   {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER,   XXXXXXX, XXXXXXX, RAISE,   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} | ||||
| }, | ||||
| 
 | ||||
| /* Adjust (Lower + Raise)
 | ||||
|  * ,-----------------------------------------------------------------------------------. | ||||
|  * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 | | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * |      | Reset|      |      |      |      |      |      |      |      |      |  Del | | ||||
|  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||
|  * |      |      |      |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      | | ||||
|  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||
|  * |      |Voice-|Voice+|Musoff|Mus on|      |      |      |      |      |      |      | | ||||
|  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||
|  * |      |      |      |      |      |             |      |      |      |      |      | | ||||
|  * `-----------------------------------------------------------------------------------' | ||||
|  */ | ||||
| [_ADJUST] = { | ||||
|   {KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12}, | ||||
|   {_______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, | ||||
|   {_______, _______, _______, AUD_ON,  AUD_OFF, AG_NORM, AG_SWAP,  QWERTY, COLEMAK, DVORAK,  _______, _______}, | ||||
|   {_______, VC_DE,   VC_IN,   MUS_ON,  MUS_OFF, _______, _______, _______, _______, _______, _______, _______}, | ||||
|   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| const uint16_t PROGMEM fn_actions[] = { | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| #ifdef AUDIO_ENABLE | ||||
| float start_up[][2] = { | ||||
|   {440.0*pow(2.0,(14)/12.0), 20}, | ||||
|   {440.0*pow(2.0,(26)/12.0), 8}, | ||||
|   {440.0*pow(2.0,(18)/12.0), 20}, | ||||
|   {440.0*pow(2.0,(26)/12.0), 8} | ||||
| }; | ||||
| 
 | ||||
| float tone_qwerty[][2]     = SONG(QWERTY_SOUND); | ||||
| float tone_dvorak[][2]     = SONG(DVORAK_SOUND); | ||||
| float tone_colemak[][2]    = SONG(COLEMAK_SOUND); | ||||
| 
 | ||||
| float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); | ||||
| float goodbye[][2] = SONG(GOODBYE_SOUND); | ||||
| #endif | ||||
| 
 | ||||
| void persistant_default_layer_set(uint16_t default_layer) { | ||||
|   eeconfig_update_default_layer(default_layer); | ||||
|   default_layer_set(default_layer); | ||||
| } | ||||
| 
 | ||||
| const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | ||||
| { | ||||
|       switch(id) { | ||||
|         case _QWERTY: | ||||
|           if (record->event.pressed) { | ||||
|             #ifdef AUDIO_ENABLE | ||||
|               PLAY_NOTE_ARRAY(tone_qwerty, false, 0); | ||||
|             #endif | ||||
|             persistant_default_layer_set(1UL<<_QWERTY); | ||||
|           } | ||||
|           break; | ||||
|         case _COLEMAK: | ||||
|           if (record->event.pressed) { | ||||
|             #ifdef AUDIO_ENABLE | ||||
|               PLAY_NOTE_ARRAY(tone_colemak, false, 0); | ||||
|             #endif | ||||
|             persistant_default_layer_set(1UL<<_COLEMAK); | ||||
|           } | ||||
|           break; | ||||
|         case _DVORAK: | ||||
|           if (record->event.pressed) { | ||||
|             #ifdef AUDIO_ENABLE | ||||
|               PLAY_NOTE_ARRAY(tone_dvorak, false, 0); | ||||
|             #endif | ||||
|             persistant_default_layer_set(1UL<<_DVORAK); | ||||
|           } | ||||
|           break; | ||||
|         case _LOWER: | ||||
|           if (record->event.pressed) { | ||||
|             layer_on(_LOWER); | ||||
|             update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||||
|           } else { | ||||
|             layer_off(_LOWER); | ||||
|             update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||||
|           } | ||||
|           break; | ||||
|         case _RAISE: | ||||
|           if (record->event.pressed) { | ||||
|             layer_on(_RAISE); | ||||
|             update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||||
|           } else { | ||||
|             layer_off(_RAISE); | ||||
|             update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||||
|           } | ||||
|           break; | ||||
|         case M_BL: | ||||
|           if (record->event.pressed) { | ||||
|             register_code(KC_RSFT); | ||||
|             #ifdef BACKLIGHT_ENABLE | ||||
|               backlight_step(); | ||||
|             #endif | ||||
|           } else { | ||||
|             unregister_code(KC_RSFT); | ||||
|           } | ||||
|         break; | ||||
|         case 6: | ||||
|           if (record->event.pressed) { | ||||
|             #ifdef AUDIO_ENABLE | ||||
|               audio_off(); | ||||
|             #endif | ||||
|           } | ||||
|         break; | ||||
|         case 7: | ||||
|           if (record->event.pressed) { | ||||
|             #ifdef AUDIO_ENABLE | ||||
|               audio_on(); | ||||
|               PLAY_NOTE_ARRAY(start_up, false, 0); | ||||
|             #endif | ||||
|           } | ||||
|         break; | ||||
|         case 8: | ||||
|           if (record->event.pressed) { | ||||
|             #ifdef AUDIO_ENABLE | ||||
|               layer_off(_MUSIC); | ||||
|               stop_all_notes(); | ||||
|             #endif | ||||
|           } | ||||
|         break; | ||||
|         case 9: | ||||
|           if (record->event.pressed) { | ||||
|             #ifdef AUDIO_ENABLE | ||||
|               PLAY_NOTE_ARRAY(music_scale, false, 0); | ||||
|               layer_on(_MUSIC); | ||||
|             #endif | ||||
|           } | ||||
|         break; | ||||
|         case 10: | ||||
|           if (record->event.pressed) { | ||||
|             #ifdef AUDIO_ENABLE | ||||
|               voice_iterate(); | ||||
|               PLAY_NOTE_ARRAY(music_scale, false, 0); | ||||
|             #endif | ||||
|           } | ||||
|         break; | ||||
|         case 11: | ||||
|           if (record->event.pressed) { | ||||
|             #ifdef AUDIO_ENABLE | ||||
|               voice_deiterate(); | ||||
|               PLAY_NOTE_ARRAY(music_scale, false, 0); | ||||
|             #endif | ||||
|           } | ||||
|         break; | ||||
|       } | ||||
|     return MACRO_NONE; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| void matrix_init_user(void) { | ||||
|   #ifdef AUDIO_ENABLE | ||||
|     _delay_ms(20); // gets rid of tick
 | ||||
|     PLAY_NOTE_ARRAY(start_up, false, 0); | ||||
|   #endif | ||||
| } | ||||
| 
 | ||||
| #ifdef AUDIO_ENABLE | ||||
| 
 | ||||
| uint8_t starting_note = 0x0C; | ||||
| int offset = 7; | ||||
| 
 | ||||
| void process_action_user(keyrecord_t *record) { | ||||
| 
 | ||||
|   if (IS_LAYER_ON(_MUSIC)) { | ||||
|     if (record->event.pressed) { | ||||
|         play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); | ||||
|     } else { | ||||
|         stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| void play_goodbye_tone() | ||||
| { | ||||
|   PLAY_NOTE_ARRAY(goodbye, false, 0); | ||||
|   _delay_ms(150); | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| @ -0,0 +1 @@ | ||||
| AUDIO_ENABLE = yes | ||||
					Loading…
					
					
				
		Reference in new issue
	
	 Joshua T
						Joshua T