diff options
| -rw-r--r-- | README.md | 4 | ||||
| -rw-r--r-- | keyboard/ergodox_ez/Makefile | 2 | ||||
| -rw-r--r-- | keyboard/planck/Makefile | 2 | ||||
| -rwxr-xr-x | new_project.sh | 22 | ||||
| -rw-r--r-- | quantum/quantum.mk (renamed from quantum.mk) | 0 | ||||
| -rw-r--r-- | quantum/template/Makefile | 139 | ||||
| -rw-r--r-- | quantum/template/README.md | 42 | ||||
| -rw-r--r-- | quantum/template/config.h | 81 | ||||
| -rw-r--r-- | quantum/template/keymaps/keymap_default.c | 66 | ||||
| -rw-r--r-- | quantum/template/template.c | 29 | ||||
| -rw-r--r-- | quantum/template/template.h | 29 | 
11 files changed, 412 insertions, 4 deletions
@@ -65,8 +65,8 @@ You can find some keyboard specific projects under `converter` and `keyboard` di  * [ibm4704_usb](converter/ibm4704_usb)      - [IBM 4704 keyboard Converter][GH_ibm4704]  ### keyboard -* [hhkb](keyboard/hhkb/)                    - [Happy Hacking Keyboard pro][GH_hhkb] **my main board** -* [gh60](keyboard/gh60/)                    - [GH60] DIY 60% keyboard [prototype][GH60_proto] **my second board** +* [hhkb](keyboard/hhkb/)                    - [Happy Hacking Keyboard pro][GH_hhkb] hasu's main board +* [gh60](keyboard/gh60/)                    - [GH60] DIY 60% keyboard [prototype][GH60_proto] hasu's second board  * [hbkb](keyboard/hbkb/)                    - [Happy Buckling spring keyboard][GH_hbkb](IBM Model M 60% mod)  * [hid_liber](keyboard/hid_liber/)          - [HID liberation][HID_liber] controller (by alaricljs)  * [phantom](keyboard/phantom/)              - [Phantom] keyboard (by Tranquilite) diff --git a/keyboard/ergodox_ez/Makefile b/keyboard/ergodox_ez/Makefile index e0d303c9df..52c4c5d563 100644 --- a/keyboard/ergodox_ez/Makefile +++ b/keyboard/ergodox_ez/Makefile @@ -110,5 +110,5 @@ COMMAND_ENABLE = yes    # Commands for debug and configuration  VPATH += $(TARGET_DIR)  VPATH += $(TOP_DIR) -include $(TOP_DIR)/quantum.mk +include $(TOP_DIR)/quantum/quantum.mk diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile index fc26905d80..77e38ce366 100644 --- a/keyboard/planck/Makefile +++ b/keyboard/planck/Makefile @@ -136,5 +136,5 @@ VPATH += $(TARGET_DIR)  VPATH += $(TOP_DIR)  VPATH += $(TMK_DIR) -include $(TOP_DIR)/quantum.mk +include $(TOP_DIR)/quantum/quantum.mk diff --git a/new_project.sh b/new_project.sh new file mode 100755 index 0000000000..86ecf692f4 --- /dev/null +++ b/new_project.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# Script to make a new quantum project +# Jack Humbert 2015 + +KEYBOARD=$1 +KEYBOARD_UPPERCASE=$(echo $1 | awk '{print toupper($0)}') + +mkdir keyboard/$1 +mkdir keyboard/$1/keymaps +sed -e "s;%KEYBOARD%;$KEYBOARD;g" -e "s;%KEYBOARD_UPPERCASE%;$KEYBOARD_UPPERCASE;g" quantum/template/template.h > keyboard/$KEYBOARD/$KEYBOARD.h +sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/template.c > keyboard/$KEYBOARD/$KEYBOARD.c +sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/config.h > keyboard/$KEYBOARD/config.h +sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/README.md > keyboard/$KEYBOARD/README.md +sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/Makefile > keyboard/$KEYBOARD/Makefile +sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/keymaps/keymap_default.c > keyboard/$KEYBOARD/keymaps/keymap_default.c +cp quantum/template/bootloader.hex keyboard/$KEYBOARD/bootloader.hex + +echo "######################################################" +echo "# keyboard/$KEYBOARD project created. To start" +echo "# working on things, use the following command:" +echo "# cd keyboard/$KEYBOARD" +echo "######################################################"
\ No newline at end of file diff --git a/quantum.mk b/quantum/quantum.mk index c82e478725..c82e478725 100644 --- a/quantum.mk +++ b/quantum/quantum.mk diff --git a/quantum/template/Makefile b/quantum/template/Makefile new file mode 100644 index 0000000000..48f0547ad2 --- /dev/null +++ b/quantum/template/Makefile @@ -0,0 +1,139 @@ +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device. +#                Please customize your programmer settings(PROGRAM_CMD) +# +# make teensy = Download the hex file to the device, using teensy_loader_cli. +#               (must have teensy_loader_cli installed). +# +# make dfu = Download the hex file to the device, using dfu-programmer (must +#            have dfu-programmer installed). +# +# make flip = Download the hex file to the device, using Atmel FLIP (must +#             have Atmel FLIP installed). +# +# make dfu-ee = Download the eeprom file to the device, using dfu-programmer +#               (must have dfu-programmer installed). +# +# make flip-ee = Download the eeprom file to the device, using Atmel FLIP +#                (must have Atmel FLIP installed). +# +# make debug = Start either simulavr or avarice as specified for debugging,  +#              with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +#                   bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + +# Target file name (without extension). +TARGET = %KEYBOARD% + + +# Directory common source filess exist +TOP_DIR = ../.. +TMK_DIR = ../../tmk_core + +# Directory keyboard dependent files exist +TARGET_DIR = . + +# # project specific files +SRC = %KEYBOARD%.c + +ifdef KEYMAP +    SRC := keymaps/keymap_$(KEYMAP).c $(SRC) +else +    SRC := keymaps/keymap_default.c $(SRC) +endif + +CONFIG_H = config.h + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +#     This will define a symbol, F_CPU, in all source code files equal to the +#     processor frequency in Hz. You can then use this symbol in your source code to +#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done +#     automatically to create a 32-bit value in your source code. +# +#     This will be an integer division of F_USB below, as it is sourced by +#     F_USB after it has run through any CPU prescalers. Note that this value +#     does not *change* the processor frequency - it should merely be updated to +#     reflect the processor speed set externally so that the code can use accurate +#     software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +#     This will define a symbol, F_USB, in all source code files equal to the +#     input clock frequency (before any prescaling is performed) in Hz. This value may +#     differ from F_CPU if prescaling is used on the latter, and is required as the +#     raw input clock is fed directly to the PLL sections of the AVR for high speed +#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +#     at the end, this will be done automatically to create a 32-bit value in your +#     source code. +# +#     If no clock division is performed on the input clock inside the AVR (via the +#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +#   Teensy halfKay   512 +#   Teensy++ halfKay 1024 +#   Atmel DFU loader 4096 +#   LUFA bootloader  4096 +#   USBaspLoader     2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +#   comment out to disable the options. +# +BOOTMAGIC_ENABLE = yes	# Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes	# Mouse keys(+4700) +EXTRAKEY_ENABLE = yes	# Audio control and System control(+450) +CONSOLE_ENABLE = yes	# Console for debug(+400) +COMMAND_ENABLE = yes    # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +# SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend +# NKRO_ENABLE = yes		# USB Nkey Rollover - not yet supported in LUFA +# BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality +# MIDI_ENABLE = YES 		# MIDI controls +# UNICODE_ENABLE = YES 		# Unicode +# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID + + +# Optimize size but this may cause error "relocation truncated to fit" +#EXTRALDFLAGS = -Wl,--relax + +# Search Path +VPATH += $(TARGET_DIR) +VPATH += $(TOP_DIR) +VPATH += $(TMK_DIR) + +include $(TOP_DIR)/quantum/quantum.mk + diff --git a/quantum/template/README.md b/quantum/template/README.md new file mode 100644 index 0000000000..f5b517f162 --- /dev/null +++ b/quantum/template/README.md @@ -0,0 +1,42 @@ +%KEYBOARD% keyboard firmware +====================== +Generated firmware for the Quantum MK firmware + +## Quantum MK Firmware +You have access to a bunch of goodies: + +- Use `LSFT()`, `LCTL()`, et. al. (listed in keymap_common.h) as modifiers for keys (daisy-chain-able) +- Use `FUNC(1)` instead of `FN1` (etc.) to access the function layers beyond the 32 function layer limit +- Use `CM_F` instead of `KC_F` to get the ColeMak equivilent for shortcuts (maps backwards) +- Use `MACRODOWN()` instead of `MACRO()` to easily make a keydown macro (`CM_*` works here too) + +### Some notes on usage: + +- The `KEYMAP()` macro is unable to be used due to the bitwise modifications that take place - refer to extended_keymap_jack.c to see how to set things up with the `KC_` prefix +- Keep an eye on the Makefile - this needs to include the correct files to work +- Don't forget to use `const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {` instead of the 8bit equivilent + +## Build + +Follow [this guide](http://deskthority.net/workshop-f7/how-to-build-your-very-own-keyboard-firmware-t7177.html) to setup your development environment before anything else. Abbreviated instructions are provide at the [bottom of this document](https://github.com/rswiernik/tmk_keyboard/tree/rswiernik_dev/keyboard/planck#environment-setup) + +Download the whole firmware [here](https://github.com/jackhumbert/tmk_keyboard/archive/master.zip) and navigate to the keyboard/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex that you can load with the Teensy app onto your Planck (once you've hit reset/shorted GND & RST).  + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +####Default +To build with the default keymap, simply move to the tmk\_keyboard/keyboard/planck/ and run `make` as follows: +``` +$ make +``` + +## Keymap +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_<name>.c` and see keymap document (you can find in top README.md) and existent keymap files. +     +####**Keymaps** + +To build the firmware binary hex file with an extended keymap just do `make` with `KEYMAP` option like: +``` +$ make KEYMAP=[default|jack|<name>] +``` +_The only applicable keymaps will work with this option._ Keymaps follow the format **__keymap\_\<name\>.c__** and are stored in the `keymaps` folder. diff --git a/quantum/template/config.h b/quantum/template/config.h new file mode 100644 index 0000000000..9afedbcc07 --- /dev/null +++ b/quantum/template/config.h @@ -0,0 +1,81 @@ +/* +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       0xFEED +#define PRODUCT_ID      0x6060 +#define DEVICE_VER      0x0001 +#define MANUFACTURER    You +#define PRODUCT         %KEYBOARD% +#define DESCRIPTION     A custom keyboard + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 + +// Planck PCB default pin-out +// Change this to how you wired your keyboard +// COLS: Left to right, ROWS: Top to bottom +#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } +#define ROWS (int []){ D0, D5, B5, B6 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE    5 + +/* 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 + +/* key combination for command */ +#define IS_COMMAND() ( \ +    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* + * 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 diff --git a/quantum/template/keymaps/keymap_default.c b/quantum/template/keymaps/keymap_default.c new file mode 100644 index 0000000000..1e6684da7b --- /dev/null +++ b/quantum/template/keymaps/keymap_default.c @@ -0,0 +1,66 @@ +// 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 "%KEYBOARD%.h" + +// 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 _QW 0 +#define _CM 1 +#define _DV 2 +#define _LW 3 +#define _RS 4 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[_QW] = { /* 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(0),    KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC,  KC_SPC,  MO(_RS), KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT} +}, +[_CM] = { /* 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 }, +  {M(0),    KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC,  KC_SPC,  MO(_RS), KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT} +}, +[_DV] = { /* 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(0),    KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC,  KC_SPC,  MO(_RS), KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT} +}, +[_RS] = { /* 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_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS}, +  {KC_TRNS, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  DF(_QW), DF(_CM), DF(_DV), RESET,   KC_TRNS}, +  {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[_LW] = { /* 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_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, +  {KC_TRNS, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  DF(_QW), DF(_CM), DF(_DV), RESET,   KC_TRNS}, +  {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ +  // MACRODOWN only works in this function +      switch(id) { +        case 0: +          if (record->event.pressed) { +            register_code(KC_RSFT); +          } else { +            unregister_code(KC_RSFT); +          } +        break; +      } +    return MACRO_NONE; +}; diff --git a/quantum/template/template.c b/quantum/template/template.c new file mode 100644 index 0000000000..7be7dfc3d1 --- /dev/null +++ b/quantum/template/template.c @@ -0,0 +1,29 @@ +#include "%KEYBOARD%.h" + +__attribute__ ((weak)) +void * matrix_init_user(void) { +	// leave these blank +}; + +__attribute__ ((weak)) +void * matrix_scan_user(void) { +	// leave these blank +}; + +void * matrix_init_kb(void) { +	// put your keyboard start-up code here +	// runs once when the firmware starts up + +	if (matrix_init_user) { +		(*matrix_init_user)(); +	} +}; + +void * matrix_scan_kb(void) { +	// put your looping keyboard code here +	// runs every cycle (a lot) + +	if (matrix_scan_user) { +		(*matrix_scan_user)(); +	} +};
\ No newline at end of file diff --git a/quantum/template/template.h b/quantum/template/template.h new file mode 100644 index 0000000000..de3edf3242 --- /dev/null +++ b/quantum/template/template.h @@ -0,0 +1,29 @@ +#ifndef %KEYBOARD_UPPERCASE%_H +#define %KEYBOARD_UPPERCASE%_H + +#include "matrix.h" +#include "keymap_common.h" +#include "backlight.h" +#include <stddef.h> + +// This a shortcut to help you visually see your layout. +// The following is an example using the Planck MIT layout +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ +	k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ +	k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ +	k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ +	k30, k31, k32, k33, k34,    k35,   k37, k38, k39, k3a, k3b \ +) \ +{ \ +	{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \ +	{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \ +	{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \ +	{ k30, k31, k32, k33, k34, k35, k35, k37, k38, k39, k3a, k3b } \ +}  + +void * matrix_init_user(void); +void * matrix_scan_user(void); + +#endif
\ No newline at end of file  | 
