forked from mirrors/qmk_userspace
		
	adapts unicode to quantum.c (#333)
* Unicode
to have unicode input you need to:
- set your OS input method to UNICODE if needed
- enable unicode in your makefile
- copy the action_function from
keyboard/planck/keymaps/unicode/unicode.c to your keymap.c
set the target OS method in your keymap.c: void matrix_init_user() {
set_unicode_mode(UC_OSX); } you can then switch when you want with:
set_unicode_mode(UC_OSX); set_unicode_mode(UC_LNX);
set_unicode_mode(UC_WIN);
put some unicode codes in your keymap like so: UC(0x0061)
I did change the bit mask in quantum/keymap_common.c and .h
I’m afraid we will need uint32 to get a total support for all unicode
tables or relocate the handler as @mbarkhau did.
* rearranges keycode values, hooks-up unicode
* removes extra lalt ref
* adds unicode shortcuts and example
	
	
This commit is contained in:
		
					parent
					
						
							
								bf545061f2
							
						
					
				
			
			
				commit
				
					
						b732b79b49
					
				
			
		
					 10 changed files with 610 additions and 141 deletions
				
			
		
							
								
								
									
										326
									
								
								keyboard/planck/keymaps/unicode/keymap.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										326
									
								
								keyboard/planck/keymaps/unicode/keymap.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,326 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					   Copyright
 | 
				
			||||||
 | 
					   2015 Jack Humbert <jack.humb@gmail.com>
 | 
				
			||||||
 | 
					   2016 Francois Marlier <fmarlier@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/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   For more info on how this works per OS, see here
 | 
				
			||||||
 | 
					   https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 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 PLOVER M(12)
 | 
				
			||||||
 | 
					#define EXT_PLV M(13)
 | 
				
			||||||
 | 
					#define TOG_OUT M(14)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 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 },
 | 
				
			||||||
 | 
					  {M(M_BL), 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,  UC_q,    UC_w,    UC_f,    UC_p,    UC_g,    UC_j,    UC_l,    UC_u,    UC_y,    UC_SCLN, UC_BSPC},
 | 
				
			||||||
 | 
					  {KC_ESC,  UC_a,    UC_r,    UC_s,    UC_t,    UC_d,    UC_h,    UC_n,    UC_e,    UC_i,    UC_o,    UC_QUOT},
 | 
				
			||||||
 | 
					  {KC_LSFT, UC_z,    UC_x,    UC_c,    UC_v,    UC_b,    UC_k,    UC_m,    UC_COMM, UC_DOT,  UC_SLSH, KC_ENT},
 | 
				
			||||||
 | 
					  {KC_TRNS, 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  | Bksp |
 | 
				
			||||||
 | 
					 * |------+------+------+------+------+-------------+------+------+------+------+------|
 | 
				
			||||||
 | 
					 * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
 | 
				
			||||||
 | 
					 * |------+------+------+------+------+------|------+------+------+------+------+------|
 | 
				
			||||||
 | 
					 * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
 | 
				
			||||||
 | 
					 * |------+------+------+------+------+------+------+------+------+------+------+------|
 | 
				
			||||||
 | 
					 * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
 | 
				
			||||||
 | 
					 * `-----------------------------------------------------------------------------------'
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					[_DVORAK] = {
 | 
				
			||||||
 | 
					  {KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC},
 | 
				
			||||||
 | 
					  {KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH},
 | 
				
			||||||
 | 
					  {KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    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}
 | 
				
			||||||
 | 
					},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Lower
 | 
				
			||||||
 | 
					 * ,-----------------------------------------------------------------------------------.
 | 
				
			||||||
 | 
					 * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
 | 
				
			||||||
 | 
					 * |------+------+------+------+------+-------------+------+------+------+------+------|
 | 
				
			||||||
 | 
					 * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
 | 
				
			||||||
 | 
					 * |------+------+------+------+------+------|------+------+------+------+------+------|
 | 
				
			||||||
 | 
					 * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      |      |      |      |Enter |
 | 
				
			||||||
 | 
					 * |------+------+------+------+------+------+------+------+------+------+------+------|
 | 
				
			||||||
 | 
					 * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
 | 
				
			||||||
 | 
					 * `-----------------------------------------------------------------------------------'
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					[_LOWER] = {
 | 
				
			||||||
 | 
					  {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
 | 
				
			||||||
 | 
					  {KC_DEL,  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_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
 | 
				
			||||||
 | 
					},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Raise
 | 
				
			||||||
 | 
					 * ,-----------------------------------------------------------------------------------.
 | 
				
			||||||
 | 
					 * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
 | 
				
			||||||
 | 
					 * |------+------+------+------+------+-------------+------+------+------+------+------|
 | 
				
			||||||
 | 
					 * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
 | 
				
			||||||
 | 
					 * |------+------+------+------+------+------|------+------+------+------+------+------|
 | 
				
			||||||
 | 
					 * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      |      |      |      |Enter |
 | 
				
			||||||
 | 
					 * |------+------+------+------+------+------+------+------+------+------+------+------|
 | 
				
			||||||
 | 
					 * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
 | 
				
			||||||
 | 
					 * `-----------------------------------------------------------------------------------'
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					[_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_DEL,  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_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
 | 
				
			||||||
 | 
					},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 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},
 | 
				
			||||||
 | 
					  {TOG_OUT, 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|      |      |      |      |      |      |      |
 | 
				
			||||||
 | 
					 * |------+------+------+------+------+------+------+------+------+------+------+------|
 | 
				
			||||||
 | 
					 * |      |      |      |      |      |             |      |      |      |      |      |
 | 
				
			||||||
 | 
					 * `-----------------------------------------------------------------------------------'
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					[_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,  _______, _______, _______, _______, _______},
 | 
				
			||||||
 | 
					  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM fn_actions[] = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef AUDIO_ENABLE
 | 
				
			||||||
 | 
					float tone_startup[][2] = {
 | 
				
			||||||
 | 
					  {440.0*pow(2.0,(31)/12.0), 12},
 | 
				
			||||||
 | 
					  {440.0*pow(2.0,(28)/12.0), 8},
 | 
				
			||||||
 | 
					  {440.0*pow(2.0,(19)/12.0), 8},
 | 
				
			||||||
 | 
					  {440.0*pow(2.0,(24)/12.0), 8},
 | 
				
			||||||
 | 
					  {440.0*pow(2.0,(28)/12.0), 20}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 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 12:
 | 
				
			||||||
 | 
					          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);
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					        case 13:
 | 
				
			||||||
 | 
					          if (record->event.pressed) {
 | 
				
			||||||
 | 
					            #ifdef AUDIO_ENABLE
 | 
				
			||||||
 | 
					              PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
 | 
				
			||||||
 | 
					            #endif
 | 
				
			||||||
 | 
					            layer_off(_PLOVER);
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					        case 14:
 | 
				
			||||||
 | 
					          if (record->event.pressed) {
 | 
				
			||||||
 | 
					            return MACRO( D(E), D(R), D(F), D(V), D(O), D(L), U(E), U(R), U(F), U(V), U(O), U(L), END );
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    return MACRO_NONE;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void matrix_init_user(void) {
 | 
				
			||||||
 | 
					  #ifdef AUDIO_ENABLE
 | 
				
			||||||
 | 
					    _delay_ms(20); // stops the tick
 | 
				
			||||||
 | 
					    PLAY_NOTE_ARRAY(tone_startup, false, 0);
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef AUDIO_ENABLE
 | 
				
			||||||
 | 
					void play_goodbye_tone()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  PLAY_NOTE_ARRAY(goodbye, false, 0);
 | 
				
			||||||
 | 
					  _delay_ms(150);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										1
									
								
								keyboard/planck/keymaps/unicode/makefile.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								keyboard/planck/keymaps/unicode/makefile.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					UNICODE_ENABLE   = yes  # Unicode
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
	#include "keymap_midi.h"
 | 
						#include "keymap_midi.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
extern keymap_config_t keymap_config;
 | 
					extern keymap_config_t keymap_config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
| 
						 | 
					@ -154,20 +153,22 @@ static action_t keycode_to_action(uint16_t keycode)
 | 
				
			||||||
        case KC_TRNS:
 | 
					        case KC_TRNS:
 | 
				
			||||||
            action.code = ACTION_TRANSPARENT;
 | 
					            action.code = ACTION_TRANSPARENT;
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case 0x0100 ... 0x1FFF: ;
 | 
					        case LCTL(0) ... 0x1FFF: ;
 | 
				
			||||||
            // Has a modifier
 | 
					            // Has a modifier
 | 
				
			||||||
            // Split it up
 | 
					            // Split it up
 | 
				
			||||||
            action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); // adds modifier to key
 | 
					            action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); // adds modifier to key
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case 0x2000 ... 0x2FFF:
 | 
					        case FUNC(0) ... FUNC(0xFFF): ;
 | 
				
			||||||
            // Is a shortcut for function layer, pull last 12bits
 | 
					            // Is a shortcut for function layer, pull last 12bits
 | 
				
			||||||
            // This means we have 4,096 FN macros at our disposal
 | 
					            // This means we have 4,096 FN macros at our disposal
 | 
				
			||||||
            return keymap_func_to_action(keycode & 0xFFF);
 | 
					            return keymap_func_to_action(keycode & 0xFFF);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case 0x3000 ... 0x3FFF: ;
 | 
					        case M(0) ... M(0xFF):
 | 
				
			||||||
            // When the code starts with 3, it's an action macro.
 | 
					 | 
				
			||||||
            action.code = ACTION_MACRO(keycode & 0xFF);
 | 
					            action.code = ACTION_MACRO(keycode & 0xFF);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
 | 
					        case LT(0, 0) ... LT(0xFF, 0xF):
 | 
				
			||||||
 | 
					            action.code = ACTION_LAYER_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
    #ifdef BACKLIGHT_ENABLE
 | 
					    #ifdef BACKLIGHT_ENABLE
 | 
				
			||||||
        case BL_0 ... BL_15:
 | 
					        case BL_0 ... BL_15:
 | 
				
			||||||
            action.code = ACTION_BACKLIGHT_LEVEL(keycode & 0x000F);
 | 
					            action.code = ACTION_BACKLIGHT_LEVEL(keycode & 0x000F);
 | 
				
			||||||
| 
						 | 
					@ -201,7 +202,7 @@ static action_t keycode_to_action(uint16_t keycode)
 | 
				
			||||||
            print("\nDEBUG: enabled.\n");
 | 
					            print("\nDEBUG: enabled.\n");
 | 
				
			||||||
            debug_enable = true;
 | 
					            debug_enable = true;
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case 0x5002 ... 0x50FF:
 | 
					        case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_UNSWAP_ALT_GUI:
 | 
				
			||||||
            // MAGIC actions (BOOTMAGIC without the boot)
 | 
					            // MAGIC actions (BOOTMAGIC without the boot)
 | 
				
			||||||
            if (!eeconfig_is_enabled()) {
 | 
					            if (!eeconfig_is_enabled()) {
 | 
				
			||||||
                eeconfig_init();
 | 
					                eeconfig_init();
 | 
				
			||||||
| 
						 | 
					@ -251,7 +252,7 @@ static action_t keycode_to_action(uint16_t keycode)
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            eeconfig_update_keymap(keymap_config.raw);
 | 
					            eeconfig_update_keymap(keymap_config.raw);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case 0x5100 ... 0x56FF: ;
 | 
					        case TO(0, 1) ... OSM(0xFF): ;
 | 
				
			||||||
            // Layer movement shortcuts
 | 
					            // Layer movement shortcuts
 | 
				
			||||||
            // See .h to see constraints/usage
 | 
					            // See .h to see constraints/usage
 | 
				
			||||||
            int type = (keycode >> 0x8) & 0xF;
 | 
					            int type = (keycode >> 0x8) & 0xF;
 | 
				
			||||||
| 
						 | 
					@ -282,18 +283,9 @@ static action_t keycode_to_action(uint16_t keycode)
 | 
				
			||||||
                action.code = ACTION_MODS_ONESHOT(mod);
 | 
					                action.code = ACTION_MODS_ONESHOT(mod);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case 0x7000 ... 0x7FFF:
 | 
					        case MT(0, 0) ... MT(0xF, 0xFF):
 | 
				
			||||||
            action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF);
 | 
					            action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case 0x8000 ... 0x8FFF:
 | 
					 | 
				
			||||||
            action.code = ACTION_LAYER_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF);
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
    #ifdef UNICODE_ENABLE
 | 
					 | 
				
			||||||
        case 0x8000000 ... 0x8FFFFFF:
 | 
					 | 
				
			||||||
            uint16_t unicode = keycode & ~(0x8000);
 | 
					 | 
				
			||||||
            action.code =  ACTION_FUNCTION_OPT(unicode & 0xFF, (unicode & 0xFF00) >> 8);
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
    #endif
 | 
					 | 
				
			||||||
        default:
 | 
					        default:
 | 
				
			||||||
            action.code = ACTION_NO;
 | 
					            action.code = ACTION_NO;
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -163,38 +163,13 @@ extern const uint16_t fn_actions[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)
 | 
					#define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// These affect the backlight (if your keyboard has one).
 | 
					// 0x3100+ is free
 | 
				
			||||||
// We don't need to comment them out if your keyboard doesn't have a backlight,
 | 
					
 | 
				
			||||||
// since they don't take up any space.
 | 
					// L-ayer, T-ap - 256 keycode max, 16 layer max
 | 
				
			||||||
#define BL_ON 0x4009
 | 
					#define LT(layer, kc) (kc | 0x4000 | ((layer & 0xF) << 8))
 | 
				
			||||||
#define BL_OFF 0x4000
 | 
					 | 
				
			||||||
#define BL_0 0x4000
 | 
					 | 
				
			||||||
#define BL_1 0x4001
 | 
					 | 
				
			||||||
#define BL_2 0x4002
 | 
					 | 
				
			||||||
#define BL_3 0x4003
 | 
					 | 
				
			||||||
#define BL_4 0x4004
 | 
					 | 
				
			||||||
#define BL_5 0x4005
 | 
					 | 
				
			||||||
#define BL_6 0x4006
 | 
					 | 
				
			||||||
#define BL_7 0x4007
 | 
					 | 
				
			||||||
#define BL_8 0x4008
 | 
					 | 
				
			||||||
#define BL_9 0x4009
 | 
					 | 
				
			||||||
#define BL_10 0x400A
 | 
					 | 
				
			||||||
#define BL_11 0x400B
 | 
					 | 
				
			||||||
#define BL_12 0x400C
 | 
					 | 
				
			||||||
#define BL_13 0x400D
 | 
					 | 
				
			||||||
#define BL_14 0x400E
 | 
					 | 
				
			||||||
#define BL_15 0x400F
 | 
					 | 
				
			||||||
#define BL_DEC 0x4010
 | 
					 | 
				
			||||||
#define BL_INC 0x4011
 | 
					 | 
				
			||||||
#define BL_TOGG 0x4012
 | 
					 | 
				
			||||||
#define BL_STEP 0x4013
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define RESET 0x5000
 | 
					#define RESET 0x5000
 | 
				
			||||||
#define DEBUG 0x5001
 | 
					#define DEBUG 0x5001
 | 
				
			||||||
#define KC_LEAD 0x5014
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// MAGIC keycodes
 | 
					// MAGIC keycodes
 | 
				
			||||||
#define MAGIC_SWAP_CONTROL_CAPSLOCK      0x5002
 | 
					#define MAGIC_SWAP_CONTROL_CAPSLOCK      0x5002
 | 
				
			||||||
| 
						 | 
					@ -239,6 +214,32 @@ extern const uint16_t fn_actions[];
 | 
				
			||||||
#define MI_ON  0x5028
 | 
					#define MI_ON  0x5028
 | 
				
			||||||
#define MI_OFF 0x5029
 | 
					#define MI_OFF 0x5029
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// These affect the backlight (if your keyboard has one).
 | 
				
			||||||
 | 
					// We don't need to comment them out if your keyboard doesn't have a backlight,
 | 
				
			||||||
 | 
					// since they don't take up any space.
 | 
				
			||||||
 | 
					#define BL_ON 0x5079
 | 
				
			||||||
 | 
					#define BL_OFF 0x5070
 | 
				
			||||||
 | 
					#define BL_0 0x5070
 | 
				
			||||||
 | 
					#define BL_1 0x5071
 | 
				
			||||||
 | 
					#define BL_2 0x5072
 | 
				
			||||||
 | 
					#define BL_3 0x5073
 | 
				
			||||||
 | 
					#define BL_4 0x5074
 | 
				
			||||||
 | 
					#define BL_5 0x5075
 | 
				
			||||||
 | 
					#define BL_6 0x5076
 | 
				
			||||||
 | 
					#define BL_7 0x5077
 | 
				
			||||||
 | 
					#define BL_8 0x5078
 | 
				
			||||||
 | 
					#define BL_9 0x5079
 | 
				
			||||||
 | 
					#define BL_10 0x507A
 | 
				
			||||||
 | 
					#define BL_11 0x507B
 | 
				
			||||||
 | 
					#define BL_12 0x507C
 | 
				
			||||||
 | 
					#define BL_13 0x507D
 | 
				
			||||||
 | 
					#define BL_14 0x507E
 | 
				
			||||||
 | 
					#define BL_15 0x507F
 | 
				
			||||||
 | 
					#define BL_DEC 0x5080
 | 
				
			||||||
 | 
					#define BL_INC 0x5081
 | 
				
			||||||
 | 
					#define BL_TOGG 0x5082
 | 
				
			||||||
 | 
					#define BL_STEP 0x5083
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GOTO layer - 16 layers max
 | 
					// GOTO layer - 16 layers max
 | 
				
			||||||
// when:
 | 
					// when:
 | 
				
			||||||
// ON_PRESS    = 1
 | 
					// ON_PRESS    = 1
 | 
				
			||||||
| 
						 | 
					@ -261,6 +262,8 @@ extern const uint16_t fn_actions[];
 | 
				
			||||||
// One-shot mod
 | 
					// One-shot mod
 | 
				
			||||||
#define OSM(layer) (layer | 0x5600)
 | 
					#define OSM(layer) (layer | 0x5600)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// chording is currently at 0x57xx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// M-od, T-ap - 256 keycode max
 | 
					// M-od, T-ap - 256 keycode max
 | 
				
			||||||
#define MT(mod, kc) (kc | 0x7000 | ((mod & 0xF) << 8))
 | 
					#define MT(mod, kc) (kc | 0x7000 | ((mod & 0xF) << 8))
 | 
				
			||||||
#define CTL_T(kc) MT(0x1, kc)
 | 
					#define CTL_T(kc) MT(0x1, kc)
 | 
				
			||||||
| 
						 | 
					@ -276,14 +279,13 @@ extern const uint16_t fn_actions[];
 | 
				
			||||||
#define KC_HYPR HYPR(KC_NO)
 | 
					#define KC_HYPR HYPR(KC_NO)
 | 
				
			||||||
#define KC_MEH  MEH(KC_NO)
 | 
					#define KC_MEH  MEH(KC_NO)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// L-ayer, T-ap - 256 keycode max, 16 layer max
 | 
					#ifdef UNICODE_ENABLE
 | 
				
			||||||
#define LT(layer, kc) (kc | 0x8000 | ((layer & 0xF) << 8))
 | 
					    // For sending unicode codes.
 | 
				
			||||||
 | 
					    // You may not send codes over 7FFF -- this supports most of UTF8.
 | 
				
			||||||
// For sending unicode codes.
 | 
					    // To have a key that sends out Œ, go UC(0x0152)
 | 
				
			||||||
// You may not send codes over 1FFF -- this supports most of UTF8.
 | 
					    #define UNICODE(n) (n | 0x8000)
 | 
				
			||||||
// To have a key that sends out Œ, go UC(0x0152)
 | 
					    #define UC(n) UNICODE(n)
 | 
				
			||||||
#define UNICODE(n) (n | 0x8000)
 | 
					#endif
 | 
				
			||||||
#define UC(n) UNICODE(n)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// For tri-layer
 | 
					// For tri-layer
 | 
				
			||||||
void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3);
 | 
					void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,61 +0,0 @@
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
Copyright 2015 Jack Humbert <jack.humb@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/>.
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "keymap_common.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
uint16_t hextokeycode(int hex) {
 | 
					 | 
				
			||||||
    if (hex == 0x0) {
 | 
					 | 
				
			||||||
        return KC_0;
 | 
					 | 
				
			||||||
    } else if (hex < 0xA) {
 | 
					 | 
				
			||||||
        return KC_1 + (hex - 0x1);
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
        return KC_A + (hex - 0xA);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // For more info on how this works per OS, see here: https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (record->event.pressed) {
 | 
					 | 
				
			||||||
        uint16_t unicode = (opt << 8) | id;
 | 
					 | 
				
			||||||
        register_code(KC_LALT);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        register_code(hextokeycode((unicode & 0xF000) >> 12));
 | 
					 | 
				
			||||||
        unregister_code(hextokeycode((unicode & 0xF000) >> 12));
 | 
					 | 
				
			||||||
        register_code(hextokeycode((unicode & 0x0F00) >> 8));
 | 
					 | 
				
			||||||
        unregister_code(hextokeycode((unicode & 0x0F00) >> 8));
 | 
					 | 
				
			||||||
        register_code(hextokeycode((unicode & 0x00F0) >> 4));
 | 
					 | 
				
			||||||
        unregister_code(hextokeycode((unicode & 0x00F0) >> 4));
 | 
					 | 
				
			||||||
        register_code(hextokeycode((unicode & 0x000F)));
 | 
					 | 
				
			||||||
        unregister_code(hextokeycode((unicode & 0x000F)));
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        /* Test 'a' */
 | 
					 | 
				
			||||||
        // register_code(hextokeycode(0x0));
 | 
					 | 
				
			||||||
        // unregister_code(hextokeycode(0x0));
 | 
					 | 
				
			||||||
        // register_code(hextokeycode(0x0));
 | 
					 | 
				
			||||||
        // unregister_code(hextokeycode(0x0));
 | 
					 | 
				
			||||||
        // register_code(hextokeycode(0x6));
 | 
					 | 
				
			||||||
        // unregister_code(hextokeycode(0x6));
 | 
					 | 
				
			||||||
        // register_code(hextokeycode(0x1));
 | 
					 | 
				
			||||||
        // unregister_code(hextokeycode(0x1));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        unregister_code(KC_LALT);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -23,6 +23,18 @@ int offset = 7;
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
#ifdef AUDIO_ENABLE
 | 
					#ifdef AUDIO_ENABLE
 | 
				
			||||||
  bool music_activated = false;
 | 
					  bool music_activated = false;
 | 
				
			||||||
 | 
					  float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // music sequencer
 | 
				
			||||||
 | 
					  static bool music_sequence_recording = false;
 | 
				
			||||||
 | 
					  static bool music_sequence_playing = false;
 | 
				
			||||||
 | 
					  static float music_sequence[16] = {0};
 | 
				
			||||||
 | 
					  static uint8_t music_sequence_count = 0;
 | 
				
			||||||
 | 
					  static uint8_t music_sequence_position = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static uint16_t music_sequence_timer = 0;
 | 
				
			||||||
 | 
					  static uint16_t music_sequence_interval = 100;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef MIDI_ENABLE
 | 
					#ifdef MIDI_ENABLE
 | 
				
			||||||
| 
						 | 
					@ -44,6 +56,10 @@ uint8_t chord_keys[CHORDING_MAX] = {0};
 | 
				
			||||||
uint8_t chord_key_count = 0;
 | 
					uint8_t chord_key_count = 0;
 | 
				
			||||||
uint8_t chord_key_down = 0;
 | 
					uint8_t chord_key_down = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef UNICODE_ENABLE
 | 
				
			||||||
 | 
					  static uint8_t input_mode;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool keys_chord(uint8_t keys[]) {
 | 
					bool keys_chord(uint8_t keys[]) {
 | 
				
			||||||
  uint8_t keys_size = sizeof(keys)/sizeof(keys[0]);
 | 
					  uint8_t keys_size = sizeof(keys)/sizeof(keys[0]);
 | 
				
			||||||
  bool pass = true;
 | 
					  bool pass = true;
 | 
				
			||||||
| 
						 | 
					@ -66,14 +82,25 @@ bool keys_chord(uint8_t keys[]) {
 | 
				
			||||||
  return (pass && (in == keys_size));
 | 
					  return (pass && (in == keys_size));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool music_sequence_recording = false;
 | 
					#ifdef UNICODE_ENABLE
 | 
				
			||||||
static bool music_sequence_playing = false;
 | 
					 | 
				
			||||||
static float music_sequence[16] = {0};
 | 
					 | 
				
			||||||
static uint8_t music_sequence_count = 0;
 | 
					 | 
				
			||||||
static uint8_t music_sequence_position = 0;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
static uint16_t music_sequence_timer = 0;
 | 
					uint16_t hex_to_keycode(uint8_t hex)
 | 
				
			||||||
static uint16_t music_sequence_interval = 100;
 | 
					{
 | 
				
			||||||
 | 
					  if (hex == 0x0) {
 | 
				
			||||||
 | 
					    return KC_0;
 | 
				
			||||||
 | 
					  } else if (hex < 0xA) {
 | 
				
			||||||
 | 
					    return KC_1 + (hex - 0x1);
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    return KC_A + (hex - 0xA);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void set_unicode_mode(uint8_t os_target)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  input_mode = os_target;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool process_record_quantum(keyrecord_t *record) {
 | 
					bool process_record_quantum(keyrecord_t *record) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -347,6 +374,44 @@ bool process_record_quantum(keyrecord_t *record) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef UNICODE_ENABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (keycode > UNICODE(0) && record->event.pressed) {
 | 
				
			||||||
 | 
					    uint16_t unicode = keycode & 0x7FFF;
 | 
				
			||||||
 | 
					    switch(input_mode) {
 | 
				
			||||||
 | 
					      case UC_OSX:
 | 
				
			||||||
 | 
					        register_code(KC_LALT);
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					      case UC_LNX:
 | 
				
			||||||
 | 
					        register_code(KC_LCTL);
 | 
				
			||||||
 | 
					        register_code(KC_LSFT);
 | 
				
			||||||
 | 
					        register_code(KC_U);
 | 
				
			||||||
 | 
					        unregister_code(KC_U);
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					      case UC_WIN:
 | 
				
			||||||
 | 
					        register_code(KC_LALT);
 | 
				
			||||||
 | 
					        register_code(KC_PPLS);
 | 
				
			||||||
 | 
					        unregister_code(KC_PPLS);
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    for(int i = 3; i >= 0; i--) {
 | 
				
			||||||
 | 
					        uint8_t digit = ((unicode >> (i*4)) & 0xF);
 | 
				
			||||||
 | 
					        register_code(hex_to_keycode(digit));
 | 
				
			||||||
 | 
					        unregister_code(hex_to_keycode(digit));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    switch(input_mode) {
 | 
				
			||||||
 | 
					      case UC_OSX:
 | 
				
			||||||
 | 
					      case UC_WIN:
 | 
				
			||||||
 | 
					        unregister_code(KC_LALT);
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					      case UC_LNX:
 | 
				
			||||||
 | 
					        unregister_code(KC_LCTL);
 | 
				
			||||||
 | 
					        unregister_code(KC_LSFT);
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return process_action_kb(record);
 | 
					  return process_action_kb(record);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,9 +13,12 @@
 | 
				
			||||||
  #include "audio.h"
 | 
					  #include "audio.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifdef MIDI_ENABLE
 | 
					#ifdef MIDI_ENABLE
 | 
				
			||||||
	// #include <keymap_midi.h>
 | 
					 | 
				
			||||||
	#include <lufa.h>
 | 
						#include <lufa.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef UNICODE_ENABLE
 | 
				
			||||||
 | 
						#include "unicode.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "action_layer.h"
 | 
					#include "action_layer.h"
 | 
				
			||||||
#include "eeconfig.h"
 | 
					#include "eeconfig.h"
 | 
				
			||||||
#include <stddef.h>
 | 
					#include <stddef.h>
 | 
				
			||||||
| 
						 | 
					@ -27,25 +30,38 @@ extern uint32_t default_layer_state;
 | 
				
			||||||
	extern uint32_t layer_state;
 | 
						extern uint32_t layer_state;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool music_activated;
 | 
					#ifdef AUDIO_ENABLE
 | 
				
			||||||
 | 
						bool music_activated;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef UNICODE_ENABLE
 | 
				
			||||||
 | 
						#define UC_OSX 0
 | 
				
			||||||
 | 
						#define UC_LNX 1
 | 
				
			||||||
 | 
						#define UC_WIN 2
 | 
				
			||||||
 | 
						#define UC_BSD 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void set_unicode_input_mode(uint8_t os_target);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef DISABLE_LEADER
 | 
				
			||||||
 | 
						void leader_start(void);
 | 
				
			||||||
 | 
						void leader_end(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						#ifndef LEADER_TIMEOUT
 | 
				
			||||||
 | 
							#define LEADER_TIMEOUT 200
 | 
				
			||||||
 | 
						#endif
 | 
				
			||||||
 | 
						#define SEQ_ONE_KEY(key) if (leader_sequence[0] == (key) && leader_sequence[1] == 0 && leader_sequence[2] == 0)
 | 
				
			||||||
 | 
						#define SEQ_TWO_KEYS(key1, key2) if (leader_sequence[0] == (key1) && leader_sequence[1] == (key2) && leader_sequence[2] == 0)
 | 
				
			||||||
 | 
						#define SEQ_THREE_KEYS(key1, key2, key3) if (leader_sequence[0] == (key1) && leader_sequence[1] == (key2) && leader_sequence[2] == (key3))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						#define LEADER_EXTERNS() extern bool leading; extern uint16_t leader_time; extern uint16_t leader_sequence[3]; extern uint8_t leader_sequence_size
 | 
				
			||||||
 | 
						#define LEADER_DICTIONARY() if (leading && timer_elapsed(leader_time) > LEADER_TIMEOUT)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void matrix_init_kb(void);
 | 
					void matrix_init_kb(void);
 | 
				
			||||||
void matrix_scan_kb(void);
 | 
					void matrix_scan_kb(void);
 | 
				
			||||||
bool process_action_kb(keyrecord_t *record);
 | 
					bool process_action_kb(keyrecord_t *record);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void leader_start(void);
 | 
					 | 
				
			||||||
void leader_end(void);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef LEADER_TIMEOUT
 | 
					 | 
				
			||||||
	#define LEADER_TIMEOUT 200
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#define SEQ_ONE_KEY(key) if (leader_sequence[0] == (key) && leader_sequence[1] == 0 && leader_sequence[2] == 0)
 | 
					 | 
				
			||||||
#define SEQ_TWO_KEYS(key1, key2) if (leader_sequence[0] == (key1) && leader_sequence[1] == (key2) && leader_sequence[2] == 0)
 | 
					 | 
				
			||||||
#define SEQ_THREE_KEYS(key1, key2, key3) if (leader_sequence[0] == (key1) && leader_sequence[1] == (key2) && leader_sequence[2] == (key3))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define LEADER_EXTERNS() extern bool leading; extern uint16_t leader_time; extern uint16_t leader_sequence[3]; extern uint8_t leader_sequence_size
 | 
					 | 
				
			||||||
#define LEADER_DICTIONARY() if (leading && timer_elapsed(leader_time) > LEADER_TIMEOUT)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool is_music_on(void);
 | 
					bool is_music_on(void);
 | 
				
			||||||
void music_toggle(void);
 | 
					void music_toggle(void);
 | 
				
			||||||
void music_on(void);
 | 
					void music_on(void);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,10 +34,6 @@ ifeq ($(strip $(AUDIO_ENABLE)), yes)
 | 
				
			||||||
    SRC += $(QUANTUM_DIR)/audio/luts.c
 | 
					    SRC += $(QUANTUM_DIR)/audio/luts.c
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(strip $(UNICODE_ENABLE)), yes)
 | 
					 | 
				
			||||||
	SRC += $(QUANTUM_DIR)/keymap_unicode.c
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
 | 
					ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
 | 
				
			||||||
	SRC += $(QUANTUM_DIR)/light_ws2812.c
 | 
						SRC += $(QUANTUM_DIR)/light_ws2812.c
 | 
				
			||||||
	SRC += $(QUANTUM_DIR)/rgblight.c
 | 
						SRC += $(QUANTUM_DIR)/rgblight.c
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										128
									
								
								quantum/unicode.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								quantum/unicode.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,128 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2016 Jack Humbert <jack.humb@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 UNICODE_H
 | 
				
			||||||
 | 
					#define UNICODE_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "quantum.h"
 | 
				
			||||||
 | 
					#include <math.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define UC_BSPC	UC(0x0008)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define UC_SPC	UC(0x0020)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define UC_EXLM	UC(0x0021)
 | 
				
			||||||
 | 
					#define UC_DQUT	UC(0x0022)
 | 
				
			||||||
 | 
					#define UC_HASH	UC(0x0023)
 | 
				
			||||||
 | 
					#define UC_DLR	UC(0x0024)
 | 
				
			||||||
 | 
					#define UC_PERC	UC(0x0025)
 | 
				
			||||||
 | 
					#define UC_AMPR	UC(0x0026)
 | 
				
			||||||
 | 
					#define UC_QUOT	UC(0x0027)
 | 
				
			||||||
 | 
					#define UC_LPRN	UC(0x0028)
 | 
				
			||||||
 | 
					#define UC_RPRN	UC(0x0029)
 | 
				
			||||||
 | 
					#define UC_ASTR	UC(0x002A)
 | 
				
			||||||
 | 
					#define UC_PLUS	UC(0x002B)
 | 
				
			||||||
 | 
					#define UC_COMM	UC(0x002C)
 | 
				
			||||||
 | 
					#define UC_DASH	UC(0x002D)
 | 
				
			||||||
 | 
					#define UC_DOT	UC(0x002E)
 | 
				
			||||||
 | 
					#define UC_SLSH	UC(0x002F)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define UC_0	UC(0x0030)
 | 
				
			||||||
 | 
					#define UC_1	UC(0x0031)
 | 
				
			||||||
 | 
					#define UC_2	UC(0x0032)
 | 
				
			||||||
 | 
					#define UC_3	UC(0x0033)
 | 
				
			||||||
 | 
					#define UC_4	UC(0x0034)
 | 
				
			||||||
 | 
					#define UC_5	UC(0x0035)
 | 
				
			||||||
 | 
					#define UC_6	UC(0x0036)
 | 
				
			||||||
 | 
					#define UC_7	UC(0x0037)
 | 
				
			||||||
 | 
					#define UC_8	UC(0x0038)
 | 
				
			||||||
 | 
					#define UC_9	UC(0x0039)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define UC_COLN UC(0x003A)
 | 
				
			||||||
 | 
					#define UC_SCLN UC(0x003B)
 | 
				
			||||||
 | 
					#define UC_LT	UC(0x003C)
 | 
				
			||||||
 | 
					#define UC_EQL	UC(0x003D)
 | 
				
			||||||
 | 
					#define UC_GT	UC(0x003E)
 | 
				
			||||||
 | 
					#define UC_QUES	UC(0x003F)
 | 
				
			||||||
 | 
					#define UC_AT 	UC(0x0040)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define UC_A 	UC(0x0041)
 | 
				
			||||||
 | 
					#define UC_B 	UC(0x0042)
 | 
				
			||||||
 | 
					#define UC_C 	UC(0x0043)
 | 
				
			||||||
 | 
					#define UC_D 	UC(0x0044)
 | 
				
			||||||
 | 
					#define UC_E 	UC(0x0045)
 | 
				
			||||||
 | 
					#define UC_F 	UC(0x0046)
 | 
				
			||||||
 | 
					#define UC_G 	UC(0x0047)
 | 
				
			||||||
 | 
					#define UC_H 	UC(0x0048)
 | 
				
			||||||
 | 
					#define UC_I 	UC(0x0049)
 | 
				
			||||||
 | 
					#define UC_J 	UC(0x004A)
 | 
				
			||||||
 | 
					#define UC_K 	UC(0x004B)
 | 
				
			||||||
 | 
					#define UC_L 	UC(0x004C)
 | 
				
			||||||
 | 
					#define UC_M 	UC(0x004D)
 | 
				
			||||||
 | 
					#define UC_N 	UC(0x004E)
 | 
				
			||||||
 | 
					#define UC_O 	UC(0x004F)
 | 
				
			||||||
 | 
					#define UC_P 	UC(0x0050)
 | 
				
			||||||
 | 
					#define UC_Q 	UC(0x0051)
 | 
				
			||||||
 | 
					#define UC_R 	UC(0x0052)
 | 
				
			||||||
 | 
					#define UC_S 	UC(0x0053)
 | 
				
			||||||
 | 
					#define UC_T 	UC(0x0054)
 | 
				
			||||||
 | 
					#define UC_U 	UC(0x0055)
 | 
				
			||||||
 | 
					#define UC_V 	UC(0x0056)
 | 
				
			||||||
 | 
					#define UC_W 	UC(0x0057)
 | 
				
			||||||
 | 
					#define UC_X 	UC(0x0058)
 | 
				
			||||||
 | 
					#define UC_Y 	UC(0x0059)
 | 
				
			||||||
 | 
					#define UC_Z 	UC(0x005A)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define UC_LBRC	UC(0x005B)
 | 
				
			||||||
 | 
					#define UC_BSLS	UC(0x005C)
 | 
				
			||||||
 | 
					#define UC_RBRC	UC(0x005D)
 | 
				
			||||||
 | 
					#define UC_CIRM	UC(0x005E)
 | 
				
			||||||
 | 
					#define UC_UNDR	UC(0x005F)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define UC_GRV 	UC(0x0060)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define UC_a 	UC(0x0061)
 | 
				
			||||||
 | 
					#define UC_b 	UC(0x0062)
 | 
				
			||||||
 | 
					#define UC_c 	UC(0x0063)
 | 
				
			||||||
 | 
					#define UC_d 	UC(0x0064)
 | 
				
			||||||
 | 
					#define UC_e 	UC(0x0065)
 | 
				
			||||||
 | 
					#define UC_f 	UC(0x0066)
 | 
				
			||||||
 | 
					#define UC_g 	UC(0x0067)
 | 
				
			||||||
 | 
					#define UC_h 	UC(0x0068)
 | 
				
			||||||
 | 
					#define UC_i 	UC(0x0069)
 | 
				
			||||||
 | 
					#define UC_j 	UC(0x006A)
 | 
				
			||||||
 | 
					#define UC_k 	UC(0x006B)
 | 
				
			||||||
 | 
					#define UC_l 	UC(0x006C)
 | 
				
			||||||
 | 
					#define UC_m 	UC(0x006D)
 | 
				
			||||||
 | 
					#define UC_n 	UC(0x006E)
 | 
				
			||||||
 | 
					#define UC_o 	UC(0x006F)
 | 
				
			||||||
 | 
					#define UC_p 	UC(0x0070)
 | 
				
			||||||
 | 
					#define UC_q 	UC(0x0071)
 | 
				
			||||||
 | 
					#define UC_r 	UC(0x0072)
 | 
				
			||||||
 | 
					#define UC_s 	UC(0x0073)
 | 
				
			||||||
 | 
					#define UC_t 	UC(0x0074)
 | 
				
			||||||
 | 
					#define UC_u 	UC(0x0075)
 | 
				
			||||||
 | 
					#define UC_v 	UC(0x0076)
 | 
				
			||||||
 | 
					#define UC_w 	UC(0x0077)
 | 
				
			||||||
 | 
					#define UC_x 	UC(0x0078)
 | 
				
			||||||
 | 
					#define UC_y 	UC(0x0079)
 | 
				
			||||||
 | 
					#define UC_z 	UC(0x007A)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define UC_LCBR	UC(0x007B)
 | 
				
			||||||
 | 
					#define UC_PIPE	UC(0x007C)
 | 
				
			||||||
 | 
					#define UC_RCBR	UC(0x007D)
 | 
				
			||||||
 | 
					#define UC_TILD	UC(0x007E)
 | 
				
			||||||
 | 
					#define UC_DEL	UC(0x007F)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -60,6 +60,10 @@ ifeq ($(strip $(AUDIO_ENABLE)), yes)
 | 
				
			||||||
    OPT_DEFS += -DAUDIO_ENABLE
 | 
					    OPT_DEFS += -DAUDIO_ENABLE
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifeq ($(strip $(UNICODE_ENABLE)), yes)
 | 
				
			||||||
 | 
					    OPT_DEFS += -DUNICODE_ENABLE
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(strip $(USB_6KRO_ENABLE)), yes)
 | 
					ifeq ($(strip $(USB_6KRO_ENABLE)), yes)
 | 
				
			||||||
    OPT_DEFS += -DUSB_6KRO_ENABLE
 | 
					    OPT_DEFS += -DUSB_6KRO_ENABLE
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue