Compare commits

..

52 Commits

Author SHA1 Message Date
Jack Humbert
21c2324c3e Merge branch 'master' into planck_thk 2019-08-01 09:09:26 -04:00
Elliot Powell
9177c6fedd updates to akb/raine in ready for production units (#6457)
* Raine Update

* Update keymap and usb setting

* Update info.json

added wk support to info.json
2019-07-31 17:49:27 -07:00
Jake Grossman
13493d3a78 Removed print call to resolve #6364 (#6413)
* Change print to dprintf to avoid buffer overflow

* Add stdio header for dprintf

* Fix included headers
2019-07-31 06:11:40 -07:00
Rasmus Lindroth
2f3807682d Fix typo for building Ergodox EZ keyboards (#6453) 2019-07-31 06:08:25 -07:00
Chuck Lauer Vose
4c4850f32a Add personal 1up60HSE layout (#6451) 2019-07-31 06:07:05 -07:00
Mark Stosberg
48cc61b188 Update msiu's xd75 keymap README to be accurate (#6443) 2019-07-30 23:59:46 +01:00
Spaceman
45950bb3b6 [Keyboard] 2% Milk addition (#5796)
* Create README.md

* Update README.md

* Create info.json

* Create config.h

* Create rules.mk

* Create 2_milk.c

* Create 2_milk.h

* Create keymap.c

* Create README.md

* Create config.h

* Update info.json

* Update config.h

* Update rules.mk

* Update 2_milk.h

* Update 2_milk.c

* Delete config.h

* Update keymap.c

* Update rules.mk

* added pragma once

* Add files via upload

* Update keyboards/2_milk/rules.mk

Co-Authored-By: Rionlion100 <rionlion100@gmail.com>

* Update config.h

* changed default to OSU!

* Create README.md

* Update README.md

* Create keymap.c

* Update keymap.c

* Create README.md

* Create keymap.c

* Update keymap.c

* Update keymap.c

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* fixed pins for PCB revision

* fixed maybe

* Create README.md

* add mouse keymap

* added ExcessBread's keymap

* Update README.md

* Create keymap.c

* Create README.md

* Create keymap.c

* Update rules.mk

* Rename README.md to readme.md

* Rename README.md to readme.md

* Rename README.md to readme.md

* Rename README.md to readme.md

* Rename README.md to readme.md

* Rename README.md to readme.md

* Rename README.md to readme.md

* Update keyboards/2_milk/config.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/2_milk/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update info.json

* Update info.json

* Update info.json

* Update info.json

* Update info.json

* Add files via upload

* Update readme.md

* fix copyright

* Update 2_milk.c

* Update 2_milk.h

* Update rules.mk

* Update rules.mk

* Update config.h

* Update config.h

* Update feature_bluetooth.md

* Update feature_bluetooth.md

* Update readme.md
2019-07-30 15:24:11 -07:00
Mario Arias
a8427447bc [Keymap] ErgoDox EZ Spanish Colemak (#6258)
* keyboard

* documentation

* address PR comments #1

* address PR comments #2
2019-07-30 01:13:08 -07:00
tuesdayjohn
046fb11259 [Keymap] Added keymap folder matching username to rorschach; added readme to old keympa (#5970)
* Added keymap folder matching username; added readme to old keymap

* Update config.h
2019-07-30 00:22:44 -07:00
noroadsleft
77a1c75cf6 [Keyboard] Add AMJ66 keyboard (#5945)
* Added nearly perfect config for AMJ66, only missing top right key.

* Correct the layout macro

* Add layout mock-up to amj66.h

* Update and comment out the backlight definitions in config.h

The backlight pin was found to be D4, but there appears to be a bug in QMK that affects this keyboard.

Commenting out for now.

* Try to make a sensible default keymap

* Add testing keymap for FSund

Include the keymap that was being used for testing.

Don't forget to refactor this later into an actually useful keymap.

* Suggestions by fauxpark

- uncomment the backlight configuration
- fix the default keymap
- remove commented MCU rule
- specify the bootloader
- make mental note to not try to write code at 3:30 in the morning

* Add LAYOUT_66_ansi and LAYOUT_66_iso macros

- include QMK Configurator data
- enable Community Layout support

* Add comments about layout variants to amj66.h

* Add #define BACKLIGHT_ON_STATE 1

Partial fix for backlight breathing.

- Requires #5983 to fix fully (confirmed by FSund and fauxpark)

Co-Authored-By: fauxpark <fauxpark@gmail.com>
Co-Authored-By: Filip Sund <filip.sund@gmail.com>

* DEBOUNCING_DELAY -> DEBOUNCE

* Move AMJ66 files into new AMJKeyboard directory

* Correct Manufacturer in USB Device Descriptor

* Remove comment regarding source fork

* Correct the readme

* Update default keymap to match the details given in its readme

* White-space edit fsund_test keymap

Makes its formatting more consistent with other 66% keymaps. No logic changes.

* Linting info.json

Debug-style linting (one key object per line) and minor edits to key labels.

* Remove fsund_test keymap

* Add FSund as a maintainer in info.json
2019-07-30 00:21:44 -07:00
yulei
5cf7dbedd2 [Keyboard] add 60% pcb for the smk 2nd switch(with mx mount) (#5928)
* add smk60 pcb

* remove useless keymap

* Update keyboards/smk60/rules.mk

add 60_iso layout

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* fixed 60_iso layout

* update header file macro
2019-07-30 00:19:54 -07:00
ishtob
f2e0d38f17 [Keyboard] Assign unique vendor ID and product ID for hadron (#5184)
* assigned unique vander and product ID to hadron

* fix v2 compiled firmware size issue
2019-07-29 23:58:43 -07:00
Joel Challis
c57994f09e [Keyboard] Add meishi2 Configurator support (#6442) 2019-07-29 22:54:37 -07:00
Joel Challis
43f388166f [Keyboard] Fix maypad LAYOUT_ortho_5x4 Configurator support (#6440) 2019-07-29 22:54:09 -07:00
Joel Challis
de107eb14e [Keyboard] Fix community support for hs60 (#6439) 2019-07-29 22:53:15 -07:00
Joel Challis
d5ab675251 [Keyboard] Fix configurator support for shiro (#6436) 2019-07-29 22:51:01 -07:00
Joel Challis
a699fd3d04 [Keyboard] Add configurator support for snampad (#6435) 2019-07-29 22:49:42 -07:00
Joel Challis
207ebc42a9 [Keyboard] Correct name of community layout for ortho75 (#6434) 2019-07-29 22:42:39 -07:00
kakunpc
b28f1e6a29 [Keyboard] Add suihankey_rev1 keyboard and Fix default keymap (#6419)
* move alpha

* add suihankey rev1

* fix default keymap.

* remove split

* add split keymap

* move default_split keymap

* fix rev1 config.h

* fix split

* set BOOTMAGIC_ENABLE lite

* fix enum base
2019-07-29 22:24:07 -07:00
Zachary J. Slater
c806103f41 Update YouTube URL
The link was an outdated one to https://www.youtube.com/watch?v=7RH-1pAbjvw
The correct link appears to be https://www.youtube.com/watch?v=tx54jkRC9ZY which is shortened as in the file.
2019-07-29 10:12:22 -07:00
Sid Carter
eafd38e2a1 [Keymap] Shift RGB layout keys to the right by one to be consistent with other keymap layouts (#6431)
* move rgb toggles by one key to be consistent with all other keyboard layouts I have

* also remove unnecessary audio stuff
2019-07-28 21:16:59 -07:00
MechMerlin
e5bc50c03e [Keyboard] Leaf 60: Use correct key for 60_ansi layout on backspace (#6430) 2019-07-28 19:24:23 -07:00
imchipwood
1c5079a33c [Keyboard] Add dumbpad (#6425)
* removed some debug prints

* removed unnecessary files, tweaked some things

* rotary encoder button now connected into column 0, row 3

* tweaked keymap and moved encoder control into keymap

* tweaks

* added test keymap

* updated some things to make it easier to work with QMK configurator

* updates after merging latest master in

* fixed a few things

* removed test keymap and all related #ifdefs

* changed some dumbpad default keys, added KC_LOCK

* added image to readme

* added link to PCB github repo

* moved lock key to the rotary encoder pushbutton

* making suggested changes from @fauxpark in https://github.com/qmk/qmk_firmware/pull/6452

* adding bootmagic lite since i'm lazy and haven't soldered on the reset button...

* renamed  to

* using 7 underscores for KC_TRNS
2019-07-28 19:03:02 -07:00
Drashna Jaelre
c9424eb8d7 [Keyboard] Fix up and clean Corne Keyboard code (#6284)
* Fix corne  communication issues with LTO

* Fix up other issues with corne code

* Fix indentation

* Clang Format rev1 file for Corne
2019-07-28 10:56:35 -07:00
Drashna Jaelre
bbdc82dd36 [Keyboard] Add RGB Matrix config info to Corne Keyboard's readme (#6231) 2019-07-28 10:27:14 -07:00
XScorpion2
ec3954577c (OLED) Added support for CR (#6399)
Currently OLED Dirver only supports LF (\n) character in a string to clear out the rest of the current line and advance to the next line for writing. This PR adds support for CR (\r) character as well to advance to the next line, however not clear out the rest of the current line. This is extremely useful when you want to display a multi-line logo using a single array without wiping out exiting lines and flagging the OLED as dirty unnecessarily.
2019-07-27 13:17:18 -07:00
Drashna Jaelre
48067c530c Add support for Choco60 (#6415) 2019-07-27 09:12:29 -07:00
Naoto Takai
57958ce88e [Keyboard] Add support for Cocoa40 (#6414) 2019-07-27 09:11:50 -07:00
noroadsleft
dd6330b07c [Keyboard] Provide QMK Configurator API data for business_card (#6412)
- alpha and beta revisions
- deleted keyboards/business_card/info.json (made redundant by revision-specific files)
2019-07-26 23:20:42 -07:00
Naoto Takai
abb65857ff Add support for Choco60 2019-07-26 11:17:34 +09:00
noroadsleft
039129ac3e Update keyboards/planck/thk/rules.mk
Co-Authored-By: jackhumbert <jack.humb@gmail.com>
2018-11-02 13:52:39 -04:00
Jack Humbert
d581848c13 merge conditional read 2018-11-02 12:51:07 -04:00
Jack Humbert
adc8bc1747 sandwich if statement 2018-11-02 12:48:58 -04:00
Jack Humbert
bd71649248 fix encoder docs 2018-10-26 23:21:08 -04:00
Jack Humbert
3a64a9c55e use encoders for thk 2018-10-26 20:21:20 -04:00
Jack Humbert
44e7bdf52b Merge branch 'atmega32a_matrix' of github.com:qmk/qmk_firmware into planck_thk 2018-10-26 20:05:52 -04:00
Jack Humbert
f39a21cae1 merge 2018-10-26 17:45:28 -04:00
Jack Humbert
1a875d6091 fix typo in pindef 2018-10-22 12:25:59 -04:00
Jack Humbert
47e350f5ea last changes 2018-10-01 09:25:55 -04:00
Jack Humbert
d2e3e527d5 consolodate options, add 646 2018-09-28 22:03:04 -04:00
Jack Humbert
4caf9eade0 exclude assembler in config.h includes 2018-09-28 21:29:28 -04:00
Jack Humbert
6650bd222d remove avr include from config 2018-09-28 20:56:34 -04:00
Jack Humbert
4b194472be add atmega16 chips, link to references 2018-09-28 20:20:33 -04:00
Jack Humbert
8c5b2bf470 doc typo 2018-09-28 20:13:51 -04:00
Jack Humbert
7289b847db update for atmega32a 2018-09-28 20:12:29 -04:00
Jack Humbert
12672aca8b add computed pins from mcu type 2018-09-28 13:24:27 -04:00
Jack Humbert
bf63363c1d update matrix 2018-09-22 23:07:53 -04:00
Jack Humbert
7443da28ae add audio for atmega32a 2018-09-22 22:50:41 -04:00
Jack Humbert
0236f6a8ac encoder, dip update, adds bootloader 2018-09-21 01:09:05 -04:00
Jack Humbert
d24132ce71 add encoder and dip 2018-09-20 01:11:53 -04:00
Jack Humbert
cd4a01d296 better matrix 2018-09-20 00:09:05 -04:00
Jack Humbert
c49e7e01ab config 1 2018-09-19 23:27:13 -04:00
181 changed files with 14180 additions and 656 deletions

View File

@@ -48,4 +48,4 @@ or `keymap.c`:
## Hardware
The A an B lines of the encoders should be wired directly to the MCU, and the C/common lines should be wired to ground.
The A and B lines of the encoders should be wired directly to the MCU, and the C/common lines should be wired to ground.

View File

@@ -4,7 +4,7 @@ The [QMK Configurator](https://config.qmk.fm) is an online graphical user interf
?> **Please follow these steps in order.**
Watch the [Video Tutorial](https://youtu.be/7RH-1pAbjvw)
Watch the [Video Tutorial](https://youtu.be/tx54jkRC9ZY)
The QMK Configurator works best with Chrome/Firefox.

View File

@@ -223,7 +223,7 @@ For the PJRC devices (Teensy's), when you're ready to compile and flash your fir
For example, if your keymap is named "xyverz" and you're building a keymap for an Ergodox or Ergodox EZ, you'll use this command:
make erdogox_ez:xyverz:teensy
make ergodox_ez:xyverz:teensy
Once the firmware finishes compiling, it will output something like this:

View File

@@ -321,7 +321,7 @@ void oled_render(void) {
// Send render data chunk after rotating
if (I2C_WRITE_REG(I2C_DATA, &temp_buffer[0], OLED_BLOCK_SIZE) != I2C_STATUS_SUCCESS) {
print("oled_render data failed\n");
print("oled_render90 data failed\n");
return;
}
}
@@ -393,6 +393,11 @@ void oled_write_char(const char data, bool invert) {
return;
}
if (data == '\r') {
oled_advance_page(false);
return;
}
// copy the current render buffer to check for dirty after
static uint8_t oled_temp_buffer[OLED_FONT_WIDTH];
memcpy(&oled_temp_buffer, oled_cursor, OLED_FONT_WIDTH);

View File

@@ -0,0 +1,19 @@
/* Copyright 2018 Chuck "@vosechu" Lauer Vose
*
* 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/>.
*/
#pragma once
// place overrides here

View File

@@ -0,0 +1,46 @@
/* Copyright 2018 Chuck "@vosechu" Lauer Vose
*
* 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 QMK_KEYBOARD_H
#define SPACEFN LT(1, KC_SPC)
#define CTL_GRV CTL_T(KC_GRV)
#define ALT_TAB ALT_T(KC_TAB)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_ansi(
KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS , KC_EQL , 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_LBRC , KC_RBRC , KC_BSLS ,
KC_CAPS , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT , KC_ENT ,
KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT ,
CTL_GRV , ALT_TAB , KC_LGUI , SPACEFN , KC_RALT , KC_RGUI , MO(1) , KC_RCTL
),
[1] = LAYOUT_60_ansi(
KC_GRV , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_DEL ,
KC_TRNS , KC_TRNS , KC_UP , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_PSCR , KC_SLCK , KC_PAUS , KC_TRNS ,
KC_TRNS , KC_LEFT , KC_DOWN , KC_RGHT , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_INS , KC_HOME , KC_PGUP , KC_TRNS ,
KC_TRNS , KC_VOLU , KC_VOLD , KC_MUTE , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_END , KC_PGDN , KC_TRNS ,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , MO(2) , KC_TRNS , KC_TRNS
),
[2] = LAYOUT_60_ansi(
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , RESET ,
BL_TOGG , BL_INC , BL_DEC , BL_STEP , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS ,
RGB_TOG , RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , RGB_SPI , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , KC_TRNS , KC_TRNS , KC_TRNS ,
KC_TRNS , RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , RGB_SPD , RGB_M_SN , RGB_M_K , RGB_M_X , RGB_M_G , KC_TRNS , KC_TRNS ,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
)
};

View File

@@ -0,0 +1,6 @@
# 1up60hse keymap made by vosechu
Tweaks from default
* Add in SpaceFN so arrows are reachable with just left hand (leaving right free for mousing).
* Also add tab/grv under the alt/ctrl keys to make those easier to reach.

16
keyboards/2_milk/2_milk.c Normal file
View File

@@ -0,0 +1,16 @@
/* Copyright 2019 Sebastian Williams
*
* 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 "2_milk.h"

26
keyboards/2_milk/2_milk.h Normal file
View File

@@ -0,0 +1,26 @@
/* Copyright 2019 Sebastian Williams
*
* 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/>.
*/
#pragma once
#include "quantum.h"
#define LAYOUT( \
K00, \
K01 \
) { \
{ K00 }, \
{ K01 } \
}

41
keyboards/2_milk/config.h Normal file
View File

@@ -0,0 +1,41 @@
/* Copyright 2019 Sebastian Williams
*
* 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/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0xB195
#define DEVICE_VER 0x0001
#define MANUFACTURER rionlion100
#define PRODUCT 2% Milk
#define DESCRIPTION A milk themed 2% Keyboard
/* key matrix size */
#define MATRIX_ROWS 2
#define MATRIX_COLS 1
/* Milk default pinout */
#define DIRECT_PINS { \
{D4}, \
{C6} \
}
#define UNUSED_PINS
#ifdef RGBLIGHT_ENABLE
#define RGB_DI_PIN B6
#define RGBLED_NUM 1
#endif

View File

@@ -0,0 +1,15 @@
{
"keyboard_name": "2% Milk",
"keyboard_folder": "2_milk",
"url": "",
"maintainer": "rionlion100",
"width": 1,
"height": 2,
"layouts": {
"LAYOUT": {
"key_count": 2,
"layout": [ {"x": 0, "y": 0 }, {"x": 0, "y": 1 }]
}
}
}

View File

@@ -0,0 +1,8 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_P0,
KC_P1
)
};

View File

@@ -0,0 +1,2 @@
# Binary keymap
0 and 1 that's it

View File

@@ -0,0 +1,9 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
RCTL(KC_C),
RCTL(KC_V)
)
};

View File

@@ -0,0 +1,2 @@
# Copy/Paste Keymap
![Picture](https://i.imgur.com/7LMZZrL.png)

View File

@@ -0,0 +1,8 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_Z,
KC_X
)
};

View File

@@ -0,0 +1,2 @@
# Default keymap for 2% Milk
![Picture](https://i.imgur.com/9PsZ6wa.png)

View File

@@ -0,0 +1,31 @@
#include QMK_KEYBOARD_H
enum custom_keycodes {
DISSA,
SHRUG
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
SHRUG,
DISSA
)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case SHRUG:
if (record->event.pressed) {
send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF");
} else {
}
break;
case DISSA:
if (record->event.pressed) {
send_unicode_hex_string("0CA0 005F 0CA0");
} else {
}
break;
}
return true;
};

View File

@@ -0,0 +1,2 @@
# Emoji Keymap
![Picture](https://i.imgur.com/1zEZ9Lq.png)

View File

@@ -0,0 +1,8 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_LGUI,
KC_F11
)
};

View File

@@ -0,0 +1,2 @@
# ExcessBread's keymap
requested by excessbread

View File

@@ -0,0 +1,8 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_BTN1,
KC_BTN2
)
};

View File

@@ -0,0 +1,2 @@
# left and right mouse buttons
requested by WanderingVagrant

View File

@@ -0,0 +1,19 @@
# 2% Milk
![2%Milk](https://i.imgur.com/Ud96uXn.png)
A 2% Meme board themed around a milk carton
Keyboard Maintainer: [Rionlion100](https://github.com/rionlion100)
Hardware Availability: [Open Source](https://github.com/Rionlion100/Spaceboards/tree/master/Keyboards/2%25%20Milk)
Make example for this keyboard (after setting up your build environment):
make 2_milk:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
### Credits
+ Case design by Soft
+ PCB by PyroL
+ Name by jetpacktuxedo

34
keyboards/2_milk/rules.mk Normal file
View File

@@ -0,0 +1,34 @@
# MCU name
MCU = atmega32u4
# Processor frequency.
F_CPU = 16000000
#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
# Input clock frequency.
F_USB = $(F_CPU)
# Bootloader
BOOTLOADER = caterina
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Build Options
# comment out to disable the options.
#
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
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = no # Custom backlighting code is used, so this should not be enabled
AUDIO_ENABLE = no # This can be enabled if a speaker is connected to the expansion port. Not compatible with RGBLIGHT below
RGBLIGHT_ENABLE = yes # This can be enabled if a ws2812 strip is connected to the expansion port.

View File

@@ -23,8 +23,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT_ID 0x6060
#define DEVICE_VER 0x0001
#define MANUFACTURER AKB
#define PRODUCT Raine M3
#define DESCRIPTION Raine M3
#define PRODUCT Raine
#define DESCRIPTION Raine
/* key matrix size */
#define MATRIX_ROWS 5

View File

@@ -68,10 +68,12 @@
{ "label": "2", "x": 14.25, "y": 3 },
{ "label": "3", "x": 15.25, "y": 3 },
{ "label": "Ctrl", "x": 0, "y": 4, "w": 1.25 },
{ "label": "Win", "x": 1.25, "y": 4},
{ "label": "Alt", "x": 2.25, "y": 4, "w": 1.25 },
{ "label": "SPLEFT", "x": 3.5, "y": 4, "w": 2.25 },
{ "label": "7U", "x": 5.75, "y": 4 },
{ "label": "SPRIGHT", "x": 6.75, "y": 4, "w": 1.75 },
{ "label": "alt", "x": 8.5, "y": 4},
{ "label": "Menu", "x": 9.5, "y": 4, "w": 1.25 },
{ "x": 11, "y": 4.25 },
{ "x": 12, "y": 4.25 },

View File

@@ -17,16 +17,16 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_BSPC, KC_NLCK, KC_SLCK, KC_INS,
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_BSPC, KC_PSLS, KC_PAST, KC_PPLS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_P7, KC_P8, KC_P9,
MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_HASH, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_SLSH, KC_LSFT, KC_UP, KC_P1, KC_P2, KC_P3,
KC_LCTL, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_LGUI, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_DEL),
CTL_T(KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
[1] = LAYOUT( /* Second */
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_SCLN, KC_QUOT, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET),
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_DEL, KC_NLCK, KC_PSCR, KC_INS,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______, KC_HOME, KC_UP, KC_PGUP,
_______, _______, _______, _______, _______, _______, _______, _______, KC_SCLN, KC_QUOT, _______, _______, KC_LEFT, KC_SLCK, KC_RGHT,
_______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, _______, _______, KC_END, KC_DOWN, KC_PGDN,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET),
};

View File

@@ -23,11 +23,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K113, K114, K115, \
K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, \
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K311, K312, K313, K314, K315, \
K400, K402, K404, K405, K407, K409, K410, K412, K413, K414, K415 \
K400, K401, K402, K404, K405, K407, K408, K409, K410, K412, K413, K414, K415 \
) { \
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, KC_NO, K113, K114, K115 }, \
{ K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K311, KC_NO, K312, K313, K314, K315 }, \
{ K400, KC_NO, K402, KC_NO, K404, K405, KC_NO, K407, KC_NO, K409, K410, KC_NO, K412, K413, K414, K415 } \
{ K400, K401, K402, KC_NO, K404, K405, KC_NO, K407, K408, K409, K410, KC_NO, K412, K413, K414, K415 } \
}

View File

@@ -0,0 +1,43 @@
/* Copyright 2018 Alex Peters
*
* 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 "amj66.h"
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);
}

View File

@@ -0,0 +1,79 @@
/* Copyright 2018 Alex Peters
*
* 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/>.
*/
#pragma once
#include "quantum.h"
// This a shortcut to help you visually see your layout.
/* LAYOUT_all
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┐
* │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │ │0F │ ISO Enter
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┤ ┌─────┐
* │10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │ │1E │ │2C │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┘ ┌──┴┐ │
* │20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │ │1D │ │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──┬───┬─┴─┐ └───┴────┘
* │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
* ├────┴┬──┴─┬─┴──┬┴───┴───┴─┬─┴───┴───┴┬──┴─┬─┴──┬┴────┼───┼───┼───┐
* │40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │
* └─────┴────┴────┴──────────┴──────────┴────┴────┴─────┴───┴───┴───┘
* 2u Backspace = k0D
* ISO # = k1D
* 2.25u Right Shift = k3C
* 6.25u Space = k44
*/
#define LAYOUT_all( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, \
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, KC_NO }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, KC_NO, KC_NO, KC_NO }, \
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, KC_NO }, \
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
}
#define LAYOUT_66_ansi( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0F, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3E, \
k40, k41, k42, k44, k45, k46, k47, k48, k49, k4A \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, KC_NO, k0F }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, KC_NO }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, KC_NO, KC_NO, KC_NO }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, KC_NO, k3E, KC_NO }, \
{ k40, k41, k42, KC_NO, k44, k45, k46, k47, k48, k49, k4A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
}
#define LAYOUT_66_iso( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0F, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1E, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k1D, k2C, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3E, \
k40, k41, k42, k44, k45, k46, k47, k48, k49, k4A \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, KC_NO, k0F }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, KC_NO }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, KC_NO, KC_NO, KC_NO }, \
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, KC_NO, k3E, KC_NO }, \
{ k40, k41, k42, KC_NO, k44, k45, k46, k47, k48, k49, k4A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
}

View File

@@ -0,0 +1,55 @@
/*
Copyright 2018 Alex Peters
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/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0xBD66
#define DEVICE_VER 0x0001
#define MANUFACTURER AMJKeyboard
#define PRODUCT AMJ66
#define DESCRIPTION QMK keyboard firmware for AMJ66
/* Key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 16
/* Keyboard Matrix Assignments */
#define MATRIX_ROW_PINS { F7, F6, F5, F4, F1 }
#define MATRIX_COL_PINS { F0, B3, B2, B1, B0, B7, D0, D1, D2, D3, D5, D6, D7, B4, B5, B6 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
#define BACKLIGHT_PIN D4
#define BACKLIGHT_LEVELS 3
#define BACKLIGHT_BREATHING
#define BREATHING_PERIOD 6
#define BACKLIGHT_ON_STATE 1
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not 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

View File

@@ -0,0 +1,227 @@
{
"keyboard_name": "AMJ66",
"url": "",
"maintainer": "FSund, qmk",
"width": 16.5,
"height": 5,
"layouts": {
"LAYOUT_all": {
"key_count": 70,
"layout": [
{"label":"~", "x":0, "y":0},
{"label":"!", "x":1, "y":0},
{"label":"@", "x":2, "y":0},
{"label":"#", "x":3, "y":0},
{"label":"$", "x":4, "y":0},
{"label":"%", "x":5, "y":0},
{"label":"^", "x":6, "y":0},
{"label":"&", "x":7, "y":0},
{"label":"*", "x":8, "y":0},
{"label":"(", "x":9, "y":0},
{"label":")", "x":10, "y":0},
{"label":"_", "x":11, "y":0},
{"label":"+", "x":12, "y":0},
{"label":"|", "x":13, "y":0},
{"label":"~", "x":14, "y":0},
{"label":"Insert", "x":15.5, "y":0},
{"label":"Tab", "x":0, "y":1, "w":1.5},
{"label":"Q", "x":1.5, "y":1},
{"label":"W", "x":2.5, "y":1},
{"label":"E", "x":3.5, "y":1},
{"label":"R", "x":4.5, "y":1},
{"label":"T", "x":5.5, "y":1},
{"label":"Y", "x":6.5, "y":1},
{"label":"U", "x":7.5, "y":1},
{"label":"I", "x":8.5, "y":1},
{"label":"O", "x":9.5, "y":1},
{"label":"P", "x":10.5, "y":1},
{"label":"{", "x":11.5, "y":1},
{"label":"}", "x":12.5, "y":1},
{"label":"Backspace", "x":13.5, "y":1, "w":1.5},
{"label":"Delete", "x":15.5, "y":1},
{"label":"Caps Lock", "x":0, "y":2, "w":1.75},
{"label":"A", "x":1.75, "y":2},
{"label":"S", "x":2.75, "y":2},
{"label":"D", "x":3.75, "y":2},
{"label":"F", "x":4.75, "y":2},
{"label":"G", "x":5.75, "y":2},
{"label":"H", "x":6.75, "y":2},
{"label":"J", "x":7.75, "y":2},
{"label":"K", "x":8.75, "y":2},
{"label":"L", "x":9.75, "y":2},
{"label":":", "x":10.75, "y":2},
{"label":"\"", "x":11.75, "y":2},
{"label":"Enter", "x":12.75, "y":2, "w":2.25},
{"label":"Shift", "x":0, "y":3, "w":1.25},
{"label":"ISO Backslash", "x":1.25, "y":3},
{"label":"Z", "x":2.25, "y":3},
{"label":"X", "x":3.25, "y":3},
{"label":"C", "x":4.25, "y":3},
{"label":"V", "x":5.25, "y":3},
{"label":"B", "x":6.25, "y":3},
{"label":"N", "x":7.25, "y":3},
{"label":"M", "x":8.25, "y":3},
{"label":"<", "x":9.25, "y":3},
{"label":">", "x":10.25, "y":3},
{"label":"?", "x":11.25, "y":3},
{"label":"Shift", "x":12.25, "y":3, "w":1.25},
{"label":"HHKB Fn", "x":13.5, "y":3},
{"label":"Up", "x":14.5, "y":3},
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
{"label":"GUI", "x":1.25, "y":4, "w":1.25},
{"label":"Alt", "x":2.5, "y":4, "w":1.5},
{"label":"Space", "x":4, "y":4, "w":2.75},
{"label":"Space", "x":6.75, "y":4, "w":2.75},
{"label":"Alt", "x":9.5, "y":4, "w":1.5},
{"label":"GUI", "x":11, "y":4, "w":1.25},
{"label":"Ctrl", "x":12.25, "y":4, "w":1.25},
{"label":"Left", "x":13.5, "y":4},
{"label":"Down", "x":14.5, "y":4},
{"label":"Right", "x":15.5, "y":4}
]
},
"LAYOUT_66_ansi": {
"key_count": 66,
"layout": [
{"label":"~", "x":0, "y":0},
{"label":"!", "x":1, "y":0},
{"label":"@", "x":2, "y":0},
{"label":"#", "x":3, "y":0},
{"label":"$", "x":4, "y":0},
{"label":"%", "x":5, "y":0},
{"label":"^", "x":6, "y":0},
{"label":"&", "x":7, "y":0},
{"label":"*", "x":8, "y":0},
{"label":"(", "x":9, "y":0},
{"label":")", "x":10, "y":0},
{"label":"_", "x":11, "y":0},
{"label":"+", "x":12, "y":0},
{"label":"Backspace", "x":13, "y":0, "w":2},
{"label":"Insert", "x":15.5, "y":0},
{"label":"Tab", "x":0, "y":1, "w":1.5},
{"label":"Q", "x":1.5, "y":1},
{"label":"W", "x":2.5, "y":1},
{"label":"E", "x":3.5, "y":1},
{"label":"R", "x":4.5, "y":1},
{"label":"T", "x":5.5, "y":1},
{"label":"Y", "x":6.5, "y":1},
{"label":"U", "x":7.5, "y":1},
{"label":"I", "x":8.5, "y":1},
{"label":"O", "x":9.5, "y":1},
{"label":"P", "x":10.5, "y":1},
{"label":"{", "x":11.5, "y":1},
{"label":"}", "x":12.5, "y":1},
{"label":"|", "x":13.5, "y":1, "w":1.5},
{"label":"Delete", "x":15.5, "y":1},
{"label":"Caps Lock", "x":0, "y":2, "w":1.75},
{"label":"A", "x":1.75, "y":2},
{"label":"S", "x":2.75, "y":2},
{"label":"D", "x":3.75, "y":2},
{"label":"F", "x":4.75, "y":2},
{"label":"G", "x":5.75, "y":2},
{"label":"H", "x":6.75, "y":2},
{"label":"J", "x":7.75, "y":2},
{"label":"K", "x":8.75, "y":2},
{"label":"L", "x":9.75, "y":2},
{"label":":", "x":10.75, "y":2},
{"label":"\"", "x":11.75, "y":2},
{"label":"Enter", "x":12.75, "y":2, "w":2.25},
{"label":"Shift", "x":0, "y":3, "w":2.25},
{"label":"Z", "x":2.25, "y":3},
{"label":"X", "x":3.25, "y":3},
{"label":"C", "x":4.25, "y":3},
{"label":"V", "x":5.25, "y":3},
{"label":"B", "x":6.25, "y":3},
{"label":"N", "x":7.25, "y":3},
{"label":"M", "x":8.25, "y":3},
{"label":"<", "x":9.25, "y":3},
{"label":">", "x":10.25, "y":3},
{"label":"?", "x":11.25, "y":3},
{"label":"Shift", "x":12.25, "y":3, "w":2.25},
{"label":"Up", "x":14.5, "y":3},
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
{"label":"GUI", "x":1.25, "y":4, "w":1.25},
{"label":"Alt", "x":2.5, "y":4, "w":1.25},
{"label":"Space", "x":3.75, "y":4, "w":6.25},
{"label":"Alt", "x":10, "y":4, "w":1.25},
{"label":"Fn", "x":11.25, "y":4},
{"label":"Ctrl", "x":12.25, "y":4, "w":1.25},
{"label":"Left", "x":13.5, "y":4},
{"label":"Down", "x":14.5, "y":4},
{"label":"Right", "x":15.5, "y":4}
]
},
"LAYOUT_66_iso": {
"key_count": 67,
"layout": [
{"label":"\u00ac", "x":0, "y":0},
{"label":"!", "x":1, "y":0},
{"label":"\"", "x":2, "y":0},
{"label":"\u00a3", "x":3, "y":0},
{"label":"$", "x":4, "y":0},
{"label":"%", "x":5, "y":0},
{"label":"^", "x":6, "y":0},
{"label":"&", "x":7, "y":0},
{"label":"*", "x":8, "y":0},
{"label":"(", "x":9, "y":0},
{"label":")", "x":10, "y":0},
{"label":"_", "x":11, "y":0},
{"label":"+", "x":12, "y":0},
{"label":"Backspace", "x":13, "y":0, "w":2},
{"label":"Insert", "x":15.5, "y":0},
{"label":"Tab", "x":0, "y":1, "w":1.5},
{"label":"Q", "x":1.5, "y":1},
{"label":"W", "x":2.5, "y":1},
{"label":"E", "x":3.5, "y":1},
{"label":"R", "x":4.5, "y":1},
{"label":"T", "x":5.5, "y":1},
{"label":"Y", "x":6.5, "y":1},
{"label":"U", "x":7.5, "y":1},
{"label":"I", "x":8.5, "y":1},
{"label":"O", "x":9.5, "y":1},
{"label":"P", "x":10.5, "y":1},
{"label":"{", "x":11.5, "y":1},
{"label":"}", "x":12.5, "y":1},
{"label":"Delete", "x":15.5, "y":1},
{"label":"Caps Lock", "x":0, "y":2, "w":1.75},
{"label":"A", "x":1.75, "y":2},
{"label":"S", "x":2.75, "y":2},
{"label":"D", "x":3.75, "y":2},
{"label":"F", "x":4.75, "y":2},
{"label":"G", "x":5.75, "y":2},
{"label":"H", "x":6.75, "y":2},
{"label":"J", "x":7.75, "y":2},
{"label":"K", "x":8.75, "y":2},
{"label":"L", "x":9.75, "y":2},
{"label":":", "x":10.75, "y":2},
{"label":"@", "x":11.75, "y":2},
{"label":"~", "x":12.75, "y":2},
{"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2},
{"label":"Shift", "x":0, "y":3, "w":1.25},
{"label":"|", "x":1.25, "y":3},
{"label":"Z", "x":2.25, "y":3},
{"label":"X", "x":3.25, "y":3},
{"label":"C", "x":4.25, "y":3},
{"label":"V", "x":5.25, "y":3},
{"label":"B", "x":6.25, "y":3},
{"label":"N", "x":7.25, "y":3},
{"label":"M", "x":8.25, "y":3},
{"label":"<", "x":9.25, "y":3},
{"label":">", "x":10.25, "y":3},
{"label":"?", "x":11.25, "y":3},
{"label":"Shift", "x":12.25, "y":3, "w":2.25},
{"label":"Up", "x":14.5, "y":3},
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
{"label":"GUI", "x":1.25, "y":4, "w":1.25},
{"label":"Alt", "x":2.5, "y":4, "w":1.25},
{"label":"Space", "x":3.75, "y":4, "w":6.25},
{"label":"AltGr", "x":10, "y":4, "w":1.25},
{"label":"GUI", "x":11.25, "y":4},
{"label":"Ctrl", "x":12.25, "y":4, "w":1.25},
{"label":"Left", "x":13.5, "y":4},
{"label":"Down", "x":14.5, "y":4},
{"label":"Right", "x":15.5, "y":4}
]
}
}
}

View File

@@ -0,0 +1,19 @@
/* Copyright 2018 Alex Peters
*
* 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/>.
*/
#pragma once
// place overrides here

View File

@@ -0,0 +1,36 @@
/* Copyright 2018 Alex Peters
*
* 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 QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_INS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_all(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_BSPC, KC_INS,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_DEL,
RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, BL_BRTG, BL_STEP, KC_SLEP, _______, _______, KC_PGUP,
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
),
};

View File

@@ -0,0 +1,12 @@
# The default keymap for AMJ66
![AMJ66 Layout Image](https://i.imgur.com/QNpHnMe.jpg)
This is a fairly universal layout that supports standard ANSI, split backspace,
split left shift, and split right shift.
Cycle backlight: Fn + .
Backlight breathing: Fn + ,
Volume Up/Down: Fn + [ and Fn + ]
Mute: Fn + \
Sleep: Fn + /
Bootloader Mode: Fn + CapsLock

View File

@@ -0,0 +1,15 @@
# AMJ66
![AMJ66](https://i.imgur.com/qtLuL2o.jpg)
A 66% keyboard formerly sold by Massdrop and KBDFans.
Keyboard Maintainer: [FSund](https://github.com/fsund), [The QMK Community](https://github.com/qmk)
Hardware Supported: AMJ66, ATmega32U4
Hardware Availability: [Drop.com](https://drop.com/buy/kbd66-mechanical-keyboard-kit?mode=guest_open)
Make example for this keyboard (after setting up your build environment):
make amjkeyboard/amj66:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

View File

@@ -0,0 +1,70 @@
# MCU name
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
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# atmega32a bootloadHID
BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = lite # 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 = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
LAYOUTS = 66_ansi 66_iso

View File

@@ -0,0 +1,19 @@
{
"keyboard_name": "business_card alpha",
"url": "",
"maintainer": "kakunpc",
"width": 3,
"height": 2,
"layouts": {
"LAYOUT": {
"layout": [
{"label":"1", "x":0, "y":0},
{"label":"2", "x":1, "y":0},
{"label":"3", "x":2, "y":0},
{"label":"4", "x":0, "y":1},
{"label":"5", "x":1, "y":1},
{"label":"6", "x":2, "y":1}
]
}
}
}

View File

@@ -0,0 +1,19 @@
{
"keyboard_name": "business_card beta",
"url": "",
"maintainer": "kakunpc",
"width": 2,
"height": 3,
"layouts": {
"LAYOUT": {
"layout": [
{"label":"1", "x":0, "y":0},
{"label":"2", "x":1, "y":0},
{"label":"3", "x":0, "y":1},
{"label":"4", "x":1, "y":1},
{"label":"5", "x":0, "y":2},
{"label":"6", "x":1, "y":2}
]
}
}
}

View File

@@ -54,4 +54,4 @@ BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
ENCODER_ENABLE = yes
LAYOUTS = LAYOUT_ortho_5x15
LAYOUTS = ortho_5x15

View File

@@ -0,0 +1,51 @@
/* Copyright 2019 Naoto Takai
*
* 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 "choco60.h"
// Optional override functions below.
// You can leave any or all of these undefined.
// These are only required if you want to perform custom actions.
/*
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);
}
*/

View File

@@ -0,0 +1,46 @@
/* Copyright 2019 Naoto Takai
*
* 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/>.
*/
#pragma once
#include "quantum.h"
/* This a shortcut to help you visually see your layout.
*
* The first section contains all of the arguments representing the physical
* layout of the board and position of the keys.
*
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
#define LAYOUT( \
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, R06, R07, R08, \
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, R17, \
L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, R26, \
L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, R36, \
L40, L41, L43, R40, R41, R43, R44 \
) \
{ \
{ L00, L01, L02, L03, L04, L05, KC_NO, KC_NO, KC_NO }, \
{ L10, L11, L12, L13, L14, L15, KC_NO, KC_NO, KC_NO }, \
{ L20, L21, L22, L23, L24, L25, KC_NO, KC_NO, KC_NO }, \
{ L30, L31, L32, L33, L34, L35, KC_NO, KC_NO, KC_NO }, \
{ L40, L41, KC_NO, L43, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ R00, R01, R02, R03, R04, R05, R06, R07, R08 }, \
{ R10, R11, R12, R13, R14, R15, R16, R17, KC_NO }, \
{ R20, R21, R22, R23, R24, R25, R26, KC_NO, KC_NO }, \
{ R30, R31, R32, R33, R34, R35, R36, KC_NO, KC_NO }, \
{ R40, R41, KC_NO, R43, R44, KC_NO, KC_NO, KC_NO, KC_NO } \
}

View File

@@ -0,0 +1,55 @@
/*
Copyright 2019 Naoto Takai
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/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC0C0
#define PRODUCT_ID 0x6000
#define DEVICE_VER 0x0001
#define MANUFACTURER Naoto Takai
#define PRODUCT choco60
#define DESCRIPTION A 60% split keyboard for programmers.
/* key matrix size */
#define MATRIX_ROWS 10
#define MATRIX_COLS 9
/*
* 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 { C6, D7, E6, B4, B5 }
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, D1 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
/*
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
*/
#define SOFT_SERIAL_PIN D3 // or D1, D2, D3, E6
#define SPLIT_HAND_PIN D0

View File

@@ -0,0 +1,12 @@
{
"keyboard_name": "Choco60",
"url": "https://keys.recompile.net/projects/choco60/",
"maintainer": "Naoto Takai",
"width": 16,
"height": 5,
"layouts": {
"LAYOUT": {
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":7, "y":0}, {"label":"&", "x":8, "y":0}, {"label":"*", "x":9, "y":0}, {"label":"(", "x":10, "y":0}, {"label":")", "x":11, "y":0}, {"label":"_", "x":12, "y":0}, {"label":"+", "x":13, "y":0}, {"label":"|", "x":14, "y":0}, {"label":"~", "x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":7.5, "y":1}, {"label":"U", "x":8.5, "y":1}, {"label":"I", "x":9.5, "y":1}, {"label":"O", "x":10.5, "y":1}, {"label":"P", "x":11.5, "y":1}, {"label":"{", "x":12.5, "y":1}, {"label":"}", "x":13.5, "y":1}, {"label":"Delete", "x":14.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":7.75, "y":2}, {"label":"J", "x":8.75, "y":2}, {"label":"K", "x":9.75, "y":2}, {"label":"L", "x":10.75, "y":2}, {"label":":", "x":11.75, "y":2}, {"label":"\"", "x":12.75, "y":2}, {"label":"Return", "x":13.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":8.25, "y":3}, {"label":"M", "x":9.25, "y":3}, {"label":"<", "x":10.25, "y":3}, {"label":">", "x":11.25, "y":3}, {"label":"?", "x":12.25, "y":3}, {"label":"Shift", "x":13.25, "y":3, "w":1.75}, {"label":"Fn", "x":15, "y":3}, {"label":"Opt", "x":1.5, "y":4}, {"label":"\u2318", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":2.75}, {"label":"Opt", "x":7.75, "y":4}, {"x":8.75, "y":4, "w":2.25}, {"label":"\u2318", "x":11, "y":4, "w":1.5}, {"label":"Ctrl", "x":12.5, "y":4}]
}
}
}

View File

@@ -0,0 +1,19 @@
/* Copyright 2019 Naoto Takai
*
* 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/>.
*/
#pragma once
// place overrides here

View File

@@ -0,0 +1,41 @@
/* Copyright 2019 Naoto Takai
*
* 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 QMK_KEYBOARD_H
enum layer_names {
_BASE,
_FN,
};
#define KC_FN MO(_FN)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BSLASH, KC_GRAVE,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRACKET, KC_RBRACKET, KC_BSPACE,
KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOTE, KC_ENTER,
KC_LSHIFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_RSHIFT, KC_FN,
KC_LALT, KC_LGUI, KC_SPACE, KC_SPACE, KC_SPACE, KC_RGUI, KC_RALT
),
[_FN] = LAYOUT(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INSERT, KC_DELETE,
_______, _______, _______, _______, _______, _______, _______, _______, KC_PSCREEN, KC_SCROLLLOCK, KC_PAUSE, KC_UP, KC_RBRACKET, KC_BSPACE,
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, KC_ENTER,
RESET, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDOWN, KC_DOWN, KC_RSHIFT, KC_FN,
_______, _______, _______, _______, _______, KC_STOP, _______
)
};

View File

@@ -0,0 +1 @@
# The default keymap for choco60

View File

@@ -0,0 +1,15 @@
# choco60
![choco60](https://keys.recompile.net/images/choco60-main@600w.jpg)
A 60% split keyboard for programmers.
Keyboard Maintainer: [Naoto Takai](https://github.com/takai)
Hardware Supported: The Choco60 PCBs, Pro Micro supported
Hardware Availability: https://keys.recompile.net/projects/choco60/
Make example for this keyboard (after setting up your build environment):
make choco60:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

View File

@@ -0,0 +1,82 @@
# MCU name
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
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# atmega32a bootloadHID
BOOTLOADER = caterina
# If you don't know the bootloader type, then you can specify the
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
# Teensy halfKay 512
# Teensy++ halfKay 1024
# Atmel DFU loader 4096
# LUFA bootloader 4096
# USBaspLoader 2048
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
SPLIT_KEYBOARD = yes # Enable split keyboard

View File

@@ -0,0 +1,43 @@
/* Copyright 2019 'Naoto Takai'
*
* 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 "cocoa40.h"
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);
}

View File

@@ -0,0 +1,44 @@
/* Copyright 2019 'Naoto Takai'
*
* 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/>.
*/
#pragma once
#include "quantum.h"
/* This a shortcut to help you visually see your layout.
*
* The first section contains all of the arguments representing the physical
* layout of the board and position of the keys.
*
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
#define LAYOUT( \
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, R06, R07, \
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, \
L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, R26, \
L31, L32, L33, R30, R32, R33 \
) \
{ \
{ L00, L01, L02, L03, L04, L05, KC_NO, KC_NO }, \
{ L10, L11, L12, L13, L14, L15, KC_NO, KC_NO }, \
{ L20, L21, L22, L23, L24, L25, KC_NO, KC_NO }, \
{ KC_NO, L31, L32, L33, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ R00, R01, R02, R03, R04, R05, R06, R07 }, \
{ R10, R11, R12, R13, R14, R15, R16, KC_NO }, \
{ R20, R21, R22, R23, R24, R25, R26, KC_NO }, \
{ R30, KC_NO, R32, R33, KC_NO, KC_NO, KC_NO, KC_NO } \
}

View File

@@ -0,0 +1,55 @@
/*
Copyright 2019 'Naoto Takai'
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/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC0C0
#define PRODUCT_ID 0x4000
#define DEVICE_VER 0x0001
#define MANUFACTURER recompile keys
#define PRODUCT cocoa40
#define DESCRIPTION A 40% keyboard for programmers.
/* key matrix size */
#define MATRIX_ROWS 8
#define MATRIX_COLS 8
/*
* 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 { F4, F5, F6, F7 }
#define MATRIX_COL_PINS { B5, B4, E6, D7, C6, D4, D0, D1 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
/*
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
*/
#define SOFT_SERIAL_PIN D2 // or D1, D2, D3, E6
#define SPLIT_HAND_PIN D3

View File

@@ -0,0 +1,12 @@
{
"keyboard_name": "Cocoa40",
"url": "https://keys.recompile.net/projects/cocoa40/",
"maintainer": "Naoto Takai",
"width": 15.25,
"height": 4,
"layouts": {
"LAYOUT": {
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"Q", "x":1, "y":0}, {"label":"W", "x":2, "y":0}, {"label":"E", "x":3, "y":0}, {"label":"R", "x":4, "y":0}, {"label":"T", "x":5, "y":0}, {"label":"Y", "x":7.25, "y":0}, {"label":"U", "x":8.25, "y":0}, {"label":"I", "x":9.25, "y":0}, {"label":"O", "x":10.25, "y":0}, {"label":"P", "x":11.25, "y":0}, {"label":"{", "x":12.25, "y":0}, {"label":"}", "x":13.25, "y":0}, {"label":"Back<br>Space", "x":14.25, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.25}, {"label":"A", "x":1.25, "y":1}, {"label":"S", "x":2.25, "y":1}, {"label":"D", "x":3.25, "y":1}, {"label":"F", "x":4.25, "y":1}, {"label":"G", "x":5.25, "y":1}, {"label":"H", "x":7.5, "y":1}, {"label":"J", "x":8.5, "y":1}, {"label":"K", "x":9.5, "y":1}, {"label":"L", "x":10.5, "y":1}, {"label":":", "x":11.5, "y":1}, {"label":"\"", "x":12.5, "y":1}, {"label":"Enter", "x":13.5, "y":1, "w":1.75}, {"label":"Shift", "x":0, "y":2, "w":1.75}, {"label":"Z", "x":1.75, "y":2}, {"label":"X", "x":2.75, "y":2}, {"label":"C", "x":3.75, "y":2}, {"label":"V", "x":4.75, "y":2}, {"label":"B", "x":5.75, "y":2}, {"label":"N", "x":8, "y":2}, {"label":"M", "x":9, "y":2}, {"label":"<", "x":10, "y":2}, {"label":">", "x":11, "y":2}, {"label":"?", "x":12, "y":2}, {"label":"Shift", "x":13, "y":2, "w":1.25}, {"label":"Fn", "x":14.25, "y":2}, {"label":"Opt", "x":1.5, "y":3}, {"label":"Command", "x":2.5, "y":3, "w":1.5}, {"label":"", "x":4, "y":3, "w":2.25}, {"label":"", "x":7.5, "y":3, "w":2.75}, {"label":"Command", "x":10.25, "y":3, "w":1.5}, {"label":"Opt", "x":11.75, "y":3}]
}
}
}

View File

@@ -0,0 +1,20 @@
/* Copyright 2019 'Naoto Takai'
*
* 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/>.
*/
#pragma once
// place overrides here

View File

@@ -0,0 +1,55 @@
/* Copyright 2019 'Naoto Takai'
*
* 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 QMK_KEYBOARD_H
enum layer_names {
_BASE,
_NUMS,
_SYMS,
_FN,
};
#define KC_NUMS LT(_NUMS, KC_SPACE)
#define KC_SYMS LT(_SYMS, KC_SPACE)
#define KC_FN MO(_FN)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRACKET, KC_RBRACKET, KC_BSPACE,
KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOTE, KC_ENTER,
KC_LSHIFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_RSHIFT, KC_FN,
KC_LALT, KC_LGUI, KC_NUMS, KC_SYMS, KC_RGUI, KC_RALT
),
[_NUMS] = LAYOUT(
KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BSLASH,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
),
[_SYMS] = LAYOUT(
KC_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_MINUS, KC_PLUS, KC_PIPE,
_______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
),
[_FN] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DELETE,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
),
};

View File

@@ -0,0 +1 @@
# The default keymap for cocoa40

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,15 @@
# cocoa40
![cocoa40](https://keys.recompile.net/images/cocoa40-main@600w.jpg)
A 40% split keyboard for programmers.
Keyboard Maintainer: [Naoto Takai](https://github.com/takai)
Hardware Supported: The Cocoa40 PCBs, Pro Micro supported
Hardware Availability: https://keys.recompile.net/projects/cocoa40/
Make example for this keyboard (after setting up your build environment):
make cocoa40:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

View File

@@ -0,0 +1,81 @@
# MCU name
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
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# atmega32a bootloadHID
BOOTLOADER = caterina
# If you don't know the bootloader type, then you can specify the
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
# Teensy halfKay 512
# Teensy++ halfKay 1024
# Atmel DFU loader 4096
# LUFA bootloader 4096
# USBaspLoader 2048
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE =no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
SPLIT_KEYBOARD = yes

View File

@@ -1,5 +1,4 @@
#include "crkbd.h"
#include "ssd1306.h"
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
#ifdef SSD1306OLED

View File

@@ -35,10 +35,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 100
#undef RGBLED_NUM
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 27
#define RGBLIGHT_LIMIT_VAL 120
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
#ifdef RGBLIGHT_ENABLE
#undef RGBLED_NUM
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 27
#define RGBLIGHT_LIMIT_VAL 120
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
#endif

View File

@@ -1,11 +1,4 @@
#include QMK_KEYBOARD_H
#ifdef PROTOCOL_LUFA
#include "lufa.h"
#include "split_util.h"
#endif
#ifdef SSD1306OLED
#include "ssd1306.h"
#endif
extern keymap_config_t keymap_config;

View File

@@ -1,358 +0,0 @@
/*
pins_arduino.h - Pin definition functions for Arduino
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2007 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id: wiring.h 249 2007-02-03 16:52:51Z mellis $
*/
#pragma once
#include <avr/pgmspace.h>
// Workaround for wrong definitions in "iom32u4.h".
// This should be fixed in the AVR toolchain.
#undef UHCON
#undef UHINT
#undef UHIEN
#undef UHADDR
#undef UHFNUM
#undef UHFNUML
#undef UHFNUMH
#undef UHFLEN
#undef UPINRQX
#undef UPINTX
#undef UPNUM
#undef UPRST
#undef UPCONX
#undef UPCFG0X
#undef UPCFG1X
#undef UPSTAX
#undef UPCFG2X
#undef UPIENX
#undef UPDATX
#undef TCCR2A
#undef WGM20
#undef WGM21
#undef COM2B0
#undef COM2B1
#undef COM2A0
#undef COM2A1
#undef TCCR2B
#undef CS20
#undef CS21
#undef CS22
#undef WGM22
#undef FOC2B
#undef FOC2A
#undef TCNT2
#undef TCNT2_0
#undef TCNT2_1
#undef TCNT2_2
#undef TCNT2_3
#undef TCNT2_4
#undef TCNT2_5
#undef TCNT2_6
#undef TCNT2_7
#undef OCR2A
#undef OCR2_0
#undef OCR2_1
#undef OCR2_2
#undef OCR2_3
#undef OCR2_4
#undef OCR2_5
#undef OCR2_6
#undef OCR2_7
#undef OCR2B
#undef OCR2_0
#undef OCR2_1
#undef OCR2_2
#undef OCR2_3
#undef OCR2_4
#undef OCR2_5
#undef OCR2_6
#undef OCR2_7
#define NUM_DIGITAL_PINS 30
#define NUM_ANALOG_INPUTS 12
#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0)
#define TXLED0 PORTD |= (1<<5)
#define TXLED1 PORTD &= ~(1<<5)
#define RXLED0 PORTB |= (1<<0)
#define RXLED1 PORTB &= ~(1<<0)
static const uint8_t SDA = 2;
static const uint8_t SCL = 3;
#define LED_BUILTIN 13
// Map SPI port to 'new' pins D14..D17
static const uint8_t SS = 17;
static const uint8_t MOSI = 16;
static const uint8_t MISO = 14;
static const uint8_t SCK = 15;
// Mapping of analog pins as digital I/O
// A6-A11 share with digital pins
static const uint8_t ADC0 = 18;
static const uint8_t ADC1 = 19;
static const uint8_t ADC2 = 20;
static const uint8_t ADC3 = 21;
static const uint8_t ADC4 = 22;
static const uint8_t ADC5 = 23;
static const uint8_t ADC6 = 24; // D4
static const uint8_t ADC7 = 25; // D6
static const uint8_t ADC8 = 26; // D8
static const uint8_t ADC9 = 27; // D9
static const uint8_t ADC10 = 28; // D10
static const uint8_t ADC11 = 29; // D12
#define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0))
#define digitalPinToPCICRbit(p) 0
#define digitalPinToPCMSK(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCMSK0) : ((uint8_t *)0))
#define digitalPinToPCMSKbit(p) ( ((p) >= 8 && (p) <= 11) ? (p) - 4 : ((p) == 14 ? 3 : ((p) == 15 ? 1 : ((p) == 16 ? 2 : ((p) == 17 ? 0 : (p - A8 + 4))))))
// __AVR_ATmega32U4__ has an unusual mapping of pins to channels
extern const uint8_t PROGMEM analog_pin_to_channel_PGM[];
#define analogPinToChannel(P) ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) )
#define digitalPinToInterrupt(p) ((p) == 0 ? 2 : ((p) == 1 ? 3 : ((p) == 2 ? 1 : ((p) == 3 ? 0 : ((p) == 7 ? 4 : NOT_AN_INTERRUPT)))))
#ifdef ARDUINO_MAIN
// On the Arduino board, digital pins are also used
// for the analog output (software PWM). Analog input
// pins are a separate set.
// ATMEL ATMEGA32U4 / ARDUINO LEONARDO
//
// D0 PD2 RXD1/INT2
// D1 PD3 TXD1/INT3
// D2 PD1 SDA SDA/INT1
// D3# PD0 PWM8/SCL OC0B/SCL/INT0
// D4 A6 PD4 ADC8
// D5# PC6 ??? OC3A/#OC4A
// D6# A7 PD7 FastPWM #OC4D/ADC10
// D7 PE6 INT6/AIN0
//
// D8 A8 PB4 ADC11/PCINT4
// D9# A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5
// D10# A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6
// D11# PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7
// D12 A11 PD6 T1/#OC4D/ADC9
// D13# PC7 PWM10 CLK0/OC4A
//
// A0 D18 PF7 ADC7
// A1 D19 PF6 ADC6
// A2 D20 PF5 ADC5
// A3 D21 PF4 ADC4
// A4 D22 PF1 ADC1
// A5 D23 PF0 ADC0
//
// New pins D14..D17 to map SPI port to digital pins
//
// MISO D14 PB3 MISO,PCINT3
// SCK D15 PB1 SCK,PCINT1
// MOSI D16 PB2 MOSI,PCINT2
// SS D17 PB0 RXLED,SS/PCINT0
//
// Connected LEDs on board for TX and RX
// TXLED D24 PD5 XCK1
// RXLED D17 PB0
// HWB PE2 HWB
// these arrays map port names (e.g. port B) to the
// appropriate addresses for various functions (e.g. reading
// and writing)
const uint16_t PROGMEM port_to_mode_PGM[] = {
NOT_A_PORT,
NOT_A_PORT,
(uint16_t) &DDRB,
(uint16_t) &DDRC,
(uint16_t) &DDRD,
(uint16_t) &DDRE,
(uint16_t) &DDRF,
};
const uint16_t PROGMEM port_to_output_PGM[] = {
NOT_A_PORT,
NOT_A_PORT,
(uint16_t) &PORTB,
(uint16_t) &PORTC,
(uint16_t) &PORTD,
(uint16_t) &PORTE,
(uint16_t) &PORTF,
};
const uint16_t PROGMEM port_to_input_PGM[] = {
NOT_A_PORT,
NOT_A_PORT,
(uint16_t) &PINB,
(uint16_t) &PINC,
(uint16_t) &PIND,
(uint16_t) &PINE,
(uint16_t) &PINF,
};
const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
PD, // D0 - PD2
PD, // D1 - PD3
PD, // D2 - PD1
PD, // D3 - PD0
PD, // D4 - PD4
PC, // D5 - PC6
PD, // D6 - PD7
PE, // D7 - PE6
PB, // D8 - PB4
PB, // D9 - PB5
PB, // D10 - PB6
PB, // D11 - PB7
PD, // D12 - PD6
PC, // D13 - PC7
PB, // D14 - MISO - PB3
PB, // D15 - SCK - PB1
PB, // D16 - MOSI - PB2
PB, // D17 - SS - PB0
PF, // D18 - A0 - PF7
PF, // D19 - A1 - PF6
PF, // D20 - A2 - PF5
PF, // D21 - A3 - PF4
PF, // D22 - A4 - PF1
PF, // D23 - A5 - PF0
PD, // D24 - PD5
PD, // D25 / D6 - A7 - PD7
PB, // D26 / D8 - A8 - PB4
PB, // D27 / D9 - A9 - PB5
PB, // D28 / D10 - A10 - PB6
PD, // D29 / D12 - A11 - PD6
};
const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
_BV(2), // D0 - PD2
_BV(3), // D1 - PD3
_BV(1), // D2 - PD1
_BV(0), // D3 - PD0
_BV(4), // D4 - PD4
_BV(6), // D5 - PC6
_BV(7), // D6 - PD7
_BV(6), // D7 - PE6
_BV(4), // D8 - PB4
_BV(5), // D9 - PB5
_BV(6), // D10 - PB6
_BV(7), // D11 - PB7
_BV(6), // D12 - PD6
_BV(7), // D13 - PC7
_BV(3), // D14 - MISO - PB3
_BV(1), // D15 - SCK - PB1
_BV(2), // D16 - MOSI - PB2
_BV(0), // D17 - SS - PB0
_BV(7), // D18 - A0 - PF7
_BV(6), // D19 - A1 - PF6
_BV(5), // D20 - A2 - PF5
_BV(4), // D21 - A3 - PF4
_BV(1), // D22 - A4 - PF1
_BV(0), // D23 - A5 - PF0
_BV(5), // D24 - PD5
_BV(7), // D25 / D6 - A7 - PD7
_BV(4), // D26 / D8 - A8 - PB4
_BV(5), // D27 / D9 - A9 - PB5
_BV(6), // D28 / D10 - A10 - PB6
_BV(6), // D29 / D12 - A11 - PD6
};
const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
TIMER0B, /* 3 */
NOT_ON_TIMER,
TIMER3A, /* 5 */
TIMER4D, /* 6 */
NOT_ON_TIMER,
NOT_ON_TIMER,
TIMER1A, /* 9 */
TIMER1B, /* 10 */
TIMER0A, /* 11 */
NOT_ON_TIMER,
TIMER4A, /* 13 */
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
};
const uint8_t PROGMEM analog_pin_to_channel_PGM[] = {
7, // A0 PF7 ADC7
6, // A1 PF6 ADC6
5, // A2 PF5 ADC5
4, // A3 PF4 ADC4
1, // A4 PF1 ADC1
0, // A5 PF0 ADC0
8, // A6 D4 PD4 ADC8
10, // A7 D6 PD7 ADC10
11, // A8 D8 PB4 ADC11
12, // A9 D9 PB5 ADC12
13, // A10 D10 PB6 ADC13
9 // A11 D12 PD6 ADC9
};
#endif /* ARDUINO_MAIN */
// These serial port names are intended to allow libraries and architecture-neutral
// sketches to automatically default to the correct port name for a particular type
// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
// the first hardware serial port whose RX/TX pins are not dedicated to another use.
//
// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor
//
// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial
//
// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library
//
// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins.
//
// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX
// pins are NOT connected to anything by default.
#define SERIAL_PORT_MONITOR Serial
#define SERIAL_PORT_USBVIRTUAL Serial
#define SERIAL_PORT_HARDWARE Serial1
#define SERIAL_PORT_HARDWARE_OPEN Serial1

View File

@@ -1,5 +1,6 @@
Crkbd
===
# Corne Keyboard (CRKBD)
Also known (incorrectly) as the `HeliDox`.
![Crkbd](https://user-images.githubusercontent.com/736191/40575636-6fba63a4-6123-11e8-9ca0-3f990f1f9f4c.jpg)
@@ -13,6 +14,80 @@ Hardware Availability: [PCB & Case Data](https://github.com/foostan/crkbd)
Make example for this keyboard (after setting up your build environment):
make crkbd:default
```sh
make crkbd:default
```
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## RGB Matrix
The Corne Keyboard also supports using the RGB Matrix feature, in place of RGB Light. This provids a better experience when using the keyboard, as it supports a number of per key effects properly. If you're not using the in switch LEDs, then you may want to pass on doing this.
In your keymap's `rules.mk` file, add the following:
```make
RGBLIGHT_ENABLE = no
RGB_MATRIX_ENABLE = WS2812
```
And in your `config.h` file, add the following:
```c
#ifdef RGB_MATRIX_ENABLE
# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
// # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
// # define RGB_MATRIX_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
// # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash.
# define RGB_MATRIX_HUE_STEP 8
# define RGB_MATRIX_SAT_STEP 8
# define RGB_MATRIX_VAL_STEP 8
# define RGB_MATRIX_SPD_STEP 10
/* Disable the animations you don't want/need. You will need to disable a good number of these *
* because they take up a lot of space. Disable until you can successfully compile your firmware. */
// # define DISABLE_RGB_MATRIX_ALPHAS_MODS
// # define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
// # define DISABLE_RGB_MATRIX_BREATHING
// # define DISABLE_RGB_MATRIX_CYCLE_ALL
// # define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
// # define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
// # define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
// # define DISABLE_RGB_MATRIX_DUAL_BEACON
// # define DISABLE_RGB_MATRIX_RAINBOW_BEACON
// # define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
// # define DISABLE_RGB_MATRIX_RAINDROPS
// # define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
// # define DISABLE_RGB_MATRIX_TYPING_HEATMAP
// # define DISABLE_RGB_MATRIX_DIGITAL_RAIN
// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE
// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
// # define DISABLE_RGB_MATRIX_SPLASH
// # define DISABLE_RGB_MATRIX_MULTISPLASH
// # define DISABLE_RGB_MATRIX_SOLID_SPLASH
// # define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
#endif
```
However, to properly handle the LED matrix, two LED maps had to be used. One for the left half, and one for the right half. For the left, you don't need to do anything. That's the default setup. But for the right side, you need to add `RGB_MATRIX_SPLIT_RIGHT=yes` needs to be added to the command.
First, compile and flash the left half. Then when that's done, recompile with the setting above. It should look something like:
```sh
make crkbd:default RGB_MATRIX_SPLIT_RIGHT=yes
```
And then flash this new firmware image.
After this is done, you should be able to use the normal RGB keycodes, but you'll see the RGB Matrix effects in use, giving a much better experience.

View File

@@ -23,7 +23,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT_ID 0x3060
#define DEVICE_VER 0x0001
#define MANUFACTURER foostan
#define PRODUCT Crkbd
#define PRODUCT Corne Keyboard (crkbd)
#define DESCRIPTION A split keyboard with 3x6 vertically staggered keys and 3 thumb keys
/* key matrix size */

View File

@@ -1,11 +1,6 @@
#include "crkbd.h"
#ifdef AUDIO_ENABLE
float tone_startup[][2] = SONG(STARTUP_SOUND);
float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
#endif
#ifdef RGB_MATRIX_ENABLE
// Logical Layout
@@ -104,22 +99,4 @@ led_config_t g_led_config = { {
4, 4, 1, 1, 1
} };
#endif
#endif
void matrix_init_kb(void) {
#ifdef AUDIO_ENABLE
_delay_ms(20); // gets rid of tick
PLAY_SONG(tone_startup);
#endif
matrix_init_user();
};
void shutdown_kb(void) {
#ifdef AUDIO_ENABLE
PLAY_SONG(tone_goodbye);
_delay_ms(150);
stop_all_notes();
#endif
}

View File

@@ -1,23 +1,28 @@
#pragma once
#include "../crkbd.h"
#include "crkbd.h"
//void promicro_bootloader_jmp(bool program);
// void promicro_bootloader_jmp(bool program);
#include "quantum.h"
#ifdef RGBLIGHT_ENABLE
//rgb led driver
#include "ws2812.h"
#ifdef PROTOCOL_LUFA
#include "lufa.h"
#include "split_util.h"
#endif
#ifdef SSD1306OLED
#include "ssd1306.h"
#endif
#ifdef USE_I2C
#include <stddef.h>
#ifdef __AVR__
#include <avr/io.h>
#include <avr/interrupt.h>
#endif
#include <stddef.h>
#ifdef __AVR__
#include <avr/interrupt.h>
#include <avr/io.h>
#endif
#endif
// clang-format off
//void promicro_bootloader_jmp(bool program);
#define LAYOUT( \
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
@@ -48,3 +53,4 @@
KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
KC_##L30, KC_##L31, KC_##L32, KC_##R30, KC_##R31, KC_##R32 \
)
// clang-format on

View File

@@ -4,6 +4,6 @@ ifeq ($(strip $(RGB_MATRIX_SPLIT_RIGHT)), yes)
OPT_DEFS += -DRGB_MATRIX_SPLIT_RIGHT
endif
SRC += rev1/matrix.c
SRC += rev1/split_util.c
SRC += rev1/split_scomm.c
SRC += matrix.c \
split_util.c \
split_scomm.c

View File

@@ -1,5 +1,5 @@
SRC += i2c.c
SRC += serial.c
QUANTUM_LIB_SRC += i2c.c \
serial.c
SRC += ssd1306.c
# if firmware size over limit, try this option
@@ -64,7 +64,8 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # 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.
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend

259
keyboards/dumbpad/config.h Normal file
View File

@@ -0,0 +1,259 @@
/*
Copyright 2019 imchipwood
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/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xDEAF
#define PRODUCT_ID 0x0913
#define DEVICE_VER 0x0001
#define MANUFACTURER imchipwood
#define PRODUCT dumbpad
#define DESCRIPTION 4x4 macro/numpad with rotary encoder
/*
* 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_ROWS 4
#define MATRIX_COLS 5
#define MATRIX_ROW_PINS { F4, F5, F6, F7 }
#define MATRIX_COL_PINS { C6, D7, E6, B4, B5 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
/* Rotary encoder */
#define ENCODERS_PAD_A { D0 }
#define ENCODERS_PAD_B { D4 }
/* Bootmagic - hold down rotary encoder pushbutton while plugging in to enter bootloader */
#define BOOTMAGIC_LITE_ROW 3
#define BOOTMAGIC_LITE_COLUMN 0
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* number of backlight levels */
/* 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
/*
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
*/
//#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
// #define BACKLIGHT_PIN B7
// #define BACKLIGHT_BREATHING
// #define BACKLIGHT_LEVELS 3
// #define RGB_DI_PIN E2
// #ifdef RGB_DI_PIN
// #define RGBLED_NUM 16
// #define RGBLIGHT_HUE_STEP 8
// #define RGBLIGHT_SAT_STEP 8
// #define RGBLIGHT_VAL_STEP 8
// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
// /*== all animations enable ==*/
// #define RGBLIGHT_ANIMATIONS
// /*== or choose animations ==*/
// #define RGBLIGHT_EFFECT_BREATHING
// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
// #define RGBLIGHT_EFFECT_SNAKE
// #define RGBLIGHT_EFFECT_KNIGHT
// #define RGBLIGHT_EFFECT_CHRISTMAS
// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
// #define RGBLIGHT_EFFECT_RGB_TEST
// #define RGBLIGHT_EFFECT_ALTERNATING
// /*== customize breathing effect ==*/
// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
// /*==== use exp() and sin() ====*/
// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
// #endif
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
*/
// #define GRAVE_ESC_CTRL_OVERRIDE
/*
* 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 */
/* defined by default; to change, uncomment and set to the combination you want */
// #define IS_COMMAND() (get_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_HELP H
//#define MAGIC_KEY_HELP_ALT 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 0
//#define MAGIC_KEY_LAYER0_ALT GRAVE
//#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 B
//#define MAGIC_KEY_BOOTLOADER_ALT ESC
//#define MAGIC_KEY_LOCK CAPS
//#define MAGIC_KEY_EEPROM E
//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
//#define MAGIC_KEY_NKRO N
//#define MAGIC_KEY_SLEEP_LED Z
/*
* 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
/*
* MIDI options
*/
/* Prevent use of disabled MIDI features in the keymap */
//#define MIDI_ENABLE_STRICT 1
/* enable basic MIDI features:
- MIDI notes can be sent when in Music mode is on
*/
//#define MIDI_BASIC
/* enable advanced MIDI features:
- MIDI notes can be added to the keymap
- Octave shift and transpose
- Virtual sustain, portamento, and modulation wheel
- etc.
*/
//#define MIDI_ADVANCED
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
/*
* HD44780 LCD Display Configuration
*/
/*
#define LCD_LINES 2 //< number of visible lines of the display
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
#if LCD_IO_MODE
#define LCD_PORT PORTB //< port for the LCD lines
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
#define LCD_RS_PORT LCD_PORT //< port for RS line
#define LCD_RS_PIN 3 //< pin for RS line
#define LCD_RW_PORT LCD_PORT //< port for RW line
#define LCD_RW_PIN 2 //< pin for RW line
#define LCD_E_PORT LCD_PORT //< port for Enable line
#define LCD_E_PIN 1 //< pin for Enable line
#endif
*/
/* Bootmagic Lite key configuration */
// #define BOOTMAGIC_LITE_ROW 0
// #define BOOTMAGIC_LITE_COLUMN 0

View File

@@ -0,0 +1,51 @@
/* Copyright 2019 Chip
*
* 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 "dumbpad.h"
// Optional override functions below.
// You can leave any or all of these undefined.
// These are only required if you want to perform custom actions.
/*
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);
}
*/

View File

@@ -0,0 +1,39 @@
/* Copyright 2019 Chip
*
* 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/>.
*/
#pragma once
#include "quantum.h"
/* This a shortcut to help you visually see your layout.
*
* The first section contains all of the arguments representing the physical
* layout of the board and position of the keys.
*
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
#define LAYOUT( \
k01, k02, k03, k04, \
k11, k12, k13, k14, \
k21, k22, k23, k24, \
k30, k31, k32, k33, k34 \
) \
{ \
{ KC_NO, k01, k02, k03, k04 }, \
{ KC_NO, k11, k12, k13, k14 }, \
{ KC_NO, k21, k22, k23, k24 }, \
{ k30, k31, k32, k33, k34 }, \
}

View File

@@ -0,0 +1,30 @@
{
"keyboard_name": "dumbpad",
"url": "",
"maintainer": "qmk",
"width": 5,
"height": 4,
"layouts": {
"LAYOUT": {
"layout": [
{"label":"7", "x":1, "y":0},
{"label":"8", "x":2, "y":0},
{"label":"9", "x":3, "y":0},
{"label":"BSPC", "x":4, "y":0},
{"label":"4", "x":1, "y":1},
{"label":"5", "x":2, "y":1},
{"label":"6", "x":3, "y":1},
{"label":"ESC", "x":4, "y":1},
{"label":"1", "x":1, "y":2},
{"label":"2", "x":2, "y":2},
{"label":"3", "x":3, "y":2},
{"label":"TAB", "x":4, "y":2},
{"label":"LMOUSE", "x":0, "y":3},
{"label":"TT(2)", "x":1, "y":3},
{"label":"0", "x":2, "y":3},
{"label":".", "x":3, "y":3},
{"label":"ENT", "x":4, "y":3}
]
}
}
}

View File

@@ -0,0 +1,106 @@
/* Copyright 2019 imchipwood
*
* 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 QMK_KEYBOARD_H
#define _BASE 0
#define _SUB 1
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
BASE LAYER
/-----------------------------------------------------`
| | 7 | 8 | 9 | Bkspc |
| |---------|---------|---------|---------|
| | 4 | 5 | 6 | Esc |
| |---------|---------|---------|---------|
| | 1 | 2 | 3 | Tab |
|-------------|---------|---------|---------|---------|
| Left mouse | MO(SUB) | 0 | . | Enter |
\-----------------------------------------------------'
*/
[_BASE] = LAYOUT( /* Base */
KC_7, KC_8, KC_9, KC_BSPC,
KC_4, KC_5, KC_6, KC_ESC,
KC_1, KC_2, KC_3, KC_TAB,
KC_BTN1, MO(_SUB), KC_0, KC_DOT, KC_ENTER
),
/*
SUB LAYER
/-----------------------------------------------------`
| | | | | Reset |
| |---------|---------|---------|---------|
| | | | | + |
| |---------|---------|---------|---------|
| | | | | - |
|-------------|---------|---------|---------|---------|
| LOCK | | | | = |
\-----------------------------------------------------'
*/
[_SUB] = LAYOUT(
_______, _______, _______, RESET,
_______, _______, _______, KC_KP_PLUS,
_______, _______, _______, KC_KP_MINUS,
KC_LOCK, _______, _______, _______, KC_EQL
),
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// If console is enabled, it will print the matrix position and status of each key pressed
/*
#ifdef CONSOLE_ENABLE
uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
#endif
*/
return true;
}
void keyboard_post_init_user(void) {
// Customise these values to desired behaviour
//debug_enable = true;
//debug_matrix = true;
//debug_keyboard = true;
//debug_mouse = true;
}
void matrix_init_user(void) {
}
void matrix_scan_user(void) {
}
void led_set_user(uint8_t usb_led) {
}
void encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) {
if (layer_state && 0x1) {
if (clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
} else {
if (clockwise) {
tap_code(KC_MS_R);
} else {
tap_code(KC_MS_L);
}
}
}
}

View File

@@ -0,0 +1,19 @@
# dumbpad
![dumbpad](https://i.imgur.com/sS3fq1Z.jpg)
A 4x4 macro/numpad with rotary encoder.
Keyboard Maintainer: [imchipwood](https://github.com/imchipwood)
PCB repository: https://github.com/imchipwood/dumbpad
Make example for this keyboard (after setting up your build environment):
make dumbpad:default
Program with:
make dumbpad:default:avrdude
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

View File

@@ -0,0 +1,84 @@
# MCU name
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
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# atmega32a bootloadHID
BOOTLOADER = caterina
# If you don't know the bootloader type, then you can specify the
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
# Teensy halfKay 512
# Teensy++ halfKay 1024
# Atmel DFU loader 4096
# LUFA bootloader 4096
# USBaspLoader 2048
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = lite # 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 = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
ENCODER_ENABLE = yes
MOUSEKEY_ENABLE = yes
KEY_LOCK_ENABLE = yes

View File

@@ -0,0 +1,20 @@
#pragma once
// Sets good default for the speed of the mouse.
#undef MOUSEKEY_INTERVAL
#undef MOUSEKEY_DELAY
#undef MOUSEKEY_TIME_TO_MAX
#undef MOUSEKEY_MAX_SPEED
#define MOUSEKEY_INTERVAL 20
#define MOUSEKEY_DELAY 100
#define MOUSEKEY_TIME_TO_MAX 60
#define MOUSEKEY_MAX_SPEED 7
#undef MOUSEKEY_WHEEL_MAX_SPEED
#undef MOUSEKEY_WHEEL_TIME_TO_MAX
#undef MOUSEKEY_WHEEL_DELAY
#define MOUSEKEY_WHEEL_MAX_SPEED 5
#define MOUSEKEY_WHEEL_TIME_TO_MAX 60
#define MOUSEKEY_WHEEL_DELAY 100

View File

@@ -0,0 +1,397 @@
/*
Copyright 2019 Mario Arias <mario@marioarias.org>
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 QMK_KEYBOARD_H
#include "version.h"
#include "keymap_spanish.h"
enum layers {
BASE = 0, //Colemak
QWERTY, //Qwerty
FN, //Colemak but FN1 to FN12 instead of numbers
NUM, //Numpad
MOUSE, //Mouse and media controls
IDEA //Shortcuts for IDEA / Other tools
};
//Special paste
#define S_PASTE LSFT(LGUI(KC_V))
//tmux prefix
#define T_PREFIX LCTL(KC_B)
// Column mode
#define I_COLUMN ALGR(LCTL(LGUI(ES_MINS)))
// Terminal
#define I_TERM ALGR(KC_F12)
// Line comment
#define I_LN_COM LCTL(LGUI(KC_7))
// Block comment
#define I_BK_COM LCTL(LGUI(KC_8))
// Reformat code
#define I_REFORM LALT(LGUI(KC_L))
// Rename
#define I_RENAME LSFT(KC_F6)
// Find usages
#define I_FUSAGE LALT(KC_F7)
// Code for Packt
#define P_CODE LCTL(ALGR(KC_X))
// Search
#define I_SEARCH LCTL(LSFT(KC_F))
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Colemak MacOS Spanish layer
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Esc | 1 ! | 2 " | 3 · | 4 $ | 5 % | º \ | | ¡ ¿ | 6 & | 7 / | 8 ( | 9 ) | 0 = | Backsp |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | TAB | Q | W | F | P | G | Home | | End | J | L | U | Y | Ñ | ' ? |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | CAPS | A | R | S | T | D |------| |------| H | N | E | I | O | ENT |
* |--------+------+------+------+------+------| <> | | -_ |------+------+------+------+------+--------|
* | Shift | Z | X | C | V | B | | | | K | M | , ; | . : | UP | Shift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | Del | PgUp |Ctl/PD|Alt/[ |Cmd/] | |Cmd/{ |Alt/} | LEFT | DOWN | RIGHT|
* `----------------------------------' `----------------------------------'
* ,--------------. ,--------------.
* | Num | Mouse | | Qwer | Ctrl |
* ,------|------|-------| |------+-------+------.
* | | | FN | |SPaste| | |
* |LShift|Backsp|-------| |------| ENT |Space |
* | | | IDEA | | T-pre| | |
* `---------------------' `---------------------'
*/
[BASE] = LAYOUT_ergodox(
// left hand
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, ES_LESS,
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_HOME,
KC_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_GRV,
KC_DEL, KC_PGUP, CTL_T(KC_PGDN), ALT_T(ES_GRV), GUI_T(ES_PLUS),
DF(NUM), DF(MOUSE),
DF(FN),
KC_LSFT, KC_BSPC, MO(IDEA),
// right hand
ES_IEXL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_END, KC_J, KC_L, KC_U, KC_Y, ES_NTIL, ES_APOS,
KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT,
ES_MINS, KC_K, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSFT,
GUI_T(ES_ACUT), ALT_T(KC_BSLS), KC_LEFT, KC_DOWN, KC_RIGHT,
DF(QWERTY), KC_RCTL,
S_PASTE,
T_PREFIX, KC_ENT, KC_SPC
),
/* Keymap 1: Spanish QWERTY layer (games) //Will probably change it for a Linux/Windows Colemak layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | Q | W | E | R | T | | | | Y | U | I | O | P | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | A | S | D | F | G |------| |------| H | J | K | L | Ñ | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | Z | X | C | V | B | | | | N | M | | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | Base | |
* ,------|------|------| |------+--------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `----------------------'
*/
[QWERTY] = LAYOUT_ergodox(
// left hand
_______, _______, _______, _______, _______, _______, _______,
_______, KC_Q, KC_W, KC_E, KC_R, KC_T, _______,
_______, KC_A, KC_S, KC_D, KC_F, KC_G,
_______, KC_Z, KC_X, KC_C, KC_V, KC_B, _______,
_______, _______, _______, _______, _______,
_______, _______,
_______,
_______, _______, _______,
// right hand
_______, _______, _______, _______, _______, _______, _______,
_______, KC_Y, KC_U, KC_I, KC_O, KC_P, _______,
KC_H, KC_J, KC_K, KC_L, KC_SCLN, _______,
_______, KC_N, KC_M, _______, _______, _______, _______,
_______, _______, _______, _______, _______,
DF(BASE), _______,
_______,
_______, _______, _______
),
/* Keymap 2: Function Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | |------| |------| | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | Base | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
[FN] = LAYOUT_ergodox(
// left hand
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
_______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______,
_______, _______,
DF(BASE),
_______, _______, _______,
// right hand
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
_______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______,
_______, _______,
_______,
_______, _______, _______
),
/* Mouse and media controls
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Esc | | | | | | Play | | Vol+ | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | Ms U | | | | | | | | Wh U | | | |
* |--------+------+------+------+------+------| Rwd | | Vol- |------+------+------+------+------+--------|
* | | | Ms L | Ms D | Ms R | |------| |------| | Wh L | Wh D | Wh R | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | Acc0 | Acc1 | Acc2 | | Fwd | | Mute | | Btn1 | Btn2 | Btn3 | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Num | Base | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------ |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
[MOUSE] = LAYOUT_ergodox(
// left hand
KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPLY,
XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_U, XXXXXXX, XXXXXXX, KC_MRWD,
XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX,
XXXXXXX, XXXXXXX, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, KC_MFFD,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
DF(NUM), DF(BASE),
XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX,
// right hand
KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_VOLD, XXXXXXX, XXXXXXX, KC_WH_U, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, KC_WH_L, KC_WH_D, KC_WH_R, XXXXXXX, XXXXXXX,
KC_MUTE, XXXXXXX, KC_BTN1, KC_BTN2, KC_BTN3, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX,
XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX
),
/* Num pad
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | ( | ) | = | / | * | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | Up | | | | | | | 7 | 8 | 9 | - | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | Left | Down |Right | |------| |------| | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | 1 | 2 | 3 |Enter | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | 0 | 0 | , |Enter | . |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Base | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------ |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
[NUM] = LAYOUT_ergodox(
// left hand
_______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, KC_UP, _______, _______, _______,
_______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______,
_______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______,
DF(BASE), _______,
_______,
_______, _______, _______,
// right hand
_______, LSFT(KC_8), LSFT(KC_9), KC_PEQL, KC_PSLS, KC_PAST, _______,
_______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______,
_______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______,
_______, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______,
KC_P0, KC_P0, KC_PDOT, KC_PENT, KC_DOT,
_______, _______,
_______,
_______, _______, _______
),
/* IDEA
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | Renm | | Usag | | LnCm | BkCm | | Term | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | |Search| | | | | | | Refm | | | | |
* |--------+------+------+------+------+------| | | Col |------+------+------+------+------+--------|
* | | | | | | |------| |------| | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | Code | | | | | | | | | | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------ |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
[IDEA] = LAYOUT_ergodox(
//Left hand
_______, _______, _______, _______, _______, _______, I_RENAME,
_______, _______, _______, I_SEARCH, _______, _______, _______,
_______, _______, _______, _______, _______, _______,
_______, _______, P_CODE, _______, _______, _______, _______,
_______, _______, _______, _______, _______,
_______, DF(BASE),
_______,
_______, _______, _______,
// right hand
I_FUSAGE, _______, I_LN_COM, I_BK_COM, _______, I_TERM, _______,
I_COLUMN, _______, I_REFORM, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______,
_______, _______,
_______,
_______, _______, _______
)
};
void led_1_off(void) {
ergodox_right_led_1_off();
}
void led_2_off(void) {
ergodox_right_led_2_off();
}
void led_3_off(void) {
ergodox_right_led_3_off();
}
//Runs just one time when the keyboard initializes
void matrix_init_use(void) {
led_1_off();
led_2_off();
led_3_off();
}
// Value to use to switch LEDs on. The default value of 255 is far too bright.
static const uint8_t max_led_value = 20;
void led_1_on(void) {
ergodox_right_led_1_on();
ergodox_right_led_1_set(max_led_value);
}
void led_2_on(void) {
ergodox_right_led_2_on();
ergodox_right_led_2_set(max_led_value);
}
void led_3_on(void) {
ergodox_right_led_3_on();
ergodox_right_led_3_set(max_led_value);
}
uint32_t layer_state_set_user(uint32_t state) {
if(layer_state_cmp(state ,IDEA)) {
led_1_on();
led_3_on();
} else {
led_1_off();
led_3_off();
}
return state;
};
void matrix_scan_user(void) {
ergodox_board_led_off();
led_1_off();
led_2_off();
led_3_off();
if(layer_state_cmp(default_layer_state, QWERTY)) {
led_3_on();
}
if(layer_state_cmp(default_layer_state, FN)) {
led_2_on();
}
if(layer_state_cmp(default_layer_state, NUM)) {
led_2_on();
led_3_on();
}
if(layer_state_cmp(default_layer_state, MOUSE)) {
led_1_on();
}
};

View File

@@ -0,0 +1,67 @@
# ErgoDox EZ Spanish Colemak configuration
## Description
A Colemak keymap adapted for Spanish.
### Base Layer - Spanish Colemak
The Base Layer is a Colemak keymap with an additional "&ntilde;" next to the "y" key. The arrow cluster has a proper T inverted shape.
It includes almost all Spanish Symbols from a normal 100% keyboard thanks to the use of tap keys
| Pressed | Tap | Shift | Alt |
|---|---|---|---|
|Left Ctrl|PgDn|||
|Left Alt|`|ˆ|[|
|Left Cmd|+|*|]|
|Right Cmd|´|¨|{|
|Right Alt|ç|Ç|}|
For example, if you want to type ```[]```, you keep pressing the "Left Alt" (To modify) and tap "Right Alt" and "Right Cmd" to send "[" and "]"
### Qwerty Layer
A Qwerty layer for gaming and maybe some VIM commands. It just modifies the few keys that are different between Colemak and Qwerty and keep all the others keys
### Fn Layer
A layer to change the number row including "º" and "¡" for "Fn1" to "Fn12". The rest is just the same as the Base layer
### Mouse and media controls
Mouse movement on the left hand, wheel and buttons on the right hand. "Play/Pause", "Rewind", "Forward" in the Left inner column. "Volume Up", "Volume Down" and "Mute" in the Right inner column
### Numpad
A complete numpad in the right hand, plus and Arrow cluster on the left hand
### IDEA (JetBrains IDEs)
A momentary layer for IDEA shortcuts that require more than two fingers or any Fn key
## How to build it
If you already have all the dependencies (Check QMK's documentation), you can run the command:
```bash
make ergodox_ez:colemak_es_osx
```
On MacOS, if you're using MacPorts you can install the following dependencies:
```bash
port install avr-binutils
port install avr-gcc
port install avr-libc
```
This isn't an exhaustive list and maybe there other dependencies that are technically necessary
## Changelog
* Jul 2019:
* Initial version for the new QMK version
![](https://imgur.com/AyWNGlL.png)

View File

@@ -40,13 +40,13 @@
}
#define LAYOUT_60_ansi( \
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K213, \
K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \
K400, K401, K402, K406, K410, K411, K412, K413 \
) { \
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, KC_NO }, \
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, KC_NO }, \
{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, KC_NO, K213, KC_NO }, \
{ K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, KC_NO, KC_NO }, \

View File

@@ -20,8 +20,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6060
#define VENDOR_ID 0xFB30
#define PRODUCT_ID 0x5F37
#define MANUFACTURER ishtob
#define PRODUCT Hadron Keyboard
#define DESCRIPTION A low profile ortholinear keyboard

View File

@@ -1,23 +0,0 @@
# 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 = no # 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 = no # Enable keyboard backlight functionality
MIDI_ENABLE = yes # MIDI controls
AUDIO_ENABLE = no # 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.
SWAP_HANDS_ENABLE = no # Enable one-hand typing
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend

View File

@@ -69,7 +69,7 @@ FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
RGB_MATRIX_ENABLE = yes # Use RGB matrix
RAW_ENABLE = yes
LAYOUTS = 60_ansi_split_bs_rshift
LAYOUTS = 60_ansi 60_iso
# Experimental features for zealcmd please do no enable
#RAW_ENABLE = yes

View File

@@ -65,3 +65,5 @@ NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plu
RAW_ENABLE = no
DYNAMIC_KEYMAP_ENABLE = no
CIE1931_CURVE = yes
LAYOUTS = 60_ansi 60_iso

View File

@@ -87,25 +87,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[_ADJUST] = LAYOUT(
//,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
_______, _______, _______, _______, _______, QWERTY, COLEMAK, _______, _______, _______, _______, _______,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
RESET , DEBUG , RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______,
//|--------+--------+--------+--------+--------+--------+--------. ,--------|--------+--------+--------+--------+--------+--------|
BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
//`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------'
_______, _______, _______, _______, _______, _______
// `--------+--------+--------' `--------+--------+--------'
//,-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------.
_______,_______,_______,_______,_______, QWERTY, COLEMAK,_______,_______,_______,_______,_______,
//|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
_______,RGB_TOG,RGB_MOD,RGB_HUI,RGB_SAI,RGB_VAI, _______,_______,_______,_______,_______,_______,
//|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
RESET ,DEBUG ,_______,RGB_HUD,RGB_SAD,RGB_VAD, _______,_______,_______,_______,_______,_______,
//|-------+-------+-------+-------+-------+-------+-------. ,-------|-------+-------+-------+-------+-------+-------|
BL_STEP,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,_______,
//`--------+-------+-------+----+--+-------+-------+-------/ \-------+-------+-------+---+---+-------+-------+-------'
_______,_______,_______, _______,_______,_______
// `-------+-------+-------' `-------+-------+-------'
)
};
#ifdef AUDIO_ENABLE
float tone_qwerty[][2] = SONG(QWERTY_SOUND);
#endif
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:

View File

@@ -0,0 +1 @@
## I've changed my folder name to match my GitHub username. Please see https://github.com/qmk/qmk_firmware/tree/master/keyboards/keebio/rorschach/keymaps/tuesdayjohn for my current keymap files.

View File

@@ -0,0 +1,23 @@
#pragma once
/* Use I2C or Serial, not both */
// #define USE_SERIAL
#define USE_I2C
/* Select hand configuration */
// #define MASTER_LEFT
// #define MASTER_RIGHT
#define EE_HANDS
#define IGNORE_MOD_TAP_INTERRUPT
#define TAPPING_TERM 175
#define TAPPING_TOGGLE 2
// #undef RGBLED_NUM
// #define RGBLIGHT_ANIMATIONS
// #define RGBLED_NUM 12
// #define RGBLIGHT_HUE_STEP 8
// #define RGBLIGHT_SAT_STEP 8
// #define RGBLIGHT_VAL_STEP 8

View File

@@ -0,0 +1,296 @@
#include QMK_KEYBOARD_H
extern keymap_config_t keymap_config;
enum rorschach_layers {
_COLEMAK, // Colemak (default layer)
_QWERTY, // Qwerty
_NUMBERS, // Numbers & Symbols
_NUMBERS2, // Numbers & Function Keys (similar to _NUMBERS; used with _NUMBERS for tri-layer access to _ADJUST)
_FUNCTION, // Function
_FUNCTION2, // Function 2 (identical as _FUNCTION; used to allow for easier use of space and backspace while using function layer arrows)
_NUMPAD, // Numpad
_ADJUST, // Adjust layer, accessed via tri-layer feature)
_ADJUST2 // Second Adjust layer, accessed outside of tri-layer feature)
};
enum rorschach_keycodes {
COLEMAK = SAFE_RANGE,
QWERTY
};
//Tap Dance Declarations
enum {
ADJ = 0,
LBCB,
RBCB,
EQPL,
PLEQ,
MNUN,
SLAS,
GVTL,
PPEQ,
PMUN,
PSPA
};
void dance_LAYER_finished(qk_tap_dance_state_t *state, void *user_data) {
if (state->count == 2) {
layer_on(_ADJUST2);
set_oneshot_layer(_ADJUST2, ONESHOT_START);
}
}
void dance_LAYER_reset(qk_tap_dance_state_t *state, void *user_data) {
if (state->count == 2) {
layer_off(_ADJUST2);
clear_oneshot_layer_state(ONESHOT_PRESSED);
}
}
qk_tap_dance_action_t tap_dance_actions[] = {
[ADJ] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_LAYER_finished, dance_LAYER_reset), // Double-tap to activate Adjust layer via oneshot layer
[LBCB] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_LCBR), // Left bracket on a single-tap, left brace on a double-tap
[RBCB] = ACTION_TAP_DANCE_DOUBLE(KC_RBRC, KC_RCBR), // Right bracket on a single-tap, right brace on a double-tap
[EQPL] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_PLUS), // Plus sign on a single-tap, equal sign on a double-tap
[PLEQ] = ACTION_TAP_DANCE_DOUBLE(KC_PLUS, KC_EQL), // Equal sign on a single-tap, plus sign on a double-tap
[MNUN] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_UNDS), // Minus sign on a single-tap, underscore on a double-tap
[SLAS] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_ASTR), // Slash in a single-tap, asterisk in a double-tap
[GVTL] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, KC_TILD), // Grave on a single-tap, tilde on a double-tap
[PPEQ] = ACTION_TAP_DANCE_DOUBLE(KC_PPLS, KC_EQL), // Numpad plus sign on a single-tap, equal sign on a double-tap
[PMUN] = ACTION_TAP_DANCE_DOUBLE(KC_PMNS, KC_UNDS), // Numpad minus sign on a single-tap, underscore on a double-tap
[PSPA] = ACTION_TAP_DANCE_DOUBLE(KC_PSLS, KC_PAST) // Numpad slash on a single-tap, numpad asterisk on a double-tap
};
//Aliases for longer keycodes
#define NUMPAD TG(_NUMPAD)
#define ADJUST MO(_ADJUST2)
#define SPCFN LT(_FUNCTION, KC_SPC)
#define BSPCFN LT(_FUNCTION2, KC_BSPC)
#define ENTNS LT(_NUMBERS, KC_ENT)
#define DELNS LT(_NUMBERS2, KC_DEL)
#define CTLESC CTL_T(KC_ESC)
#define ALTAPP ALT_T(KC_APP)
#define CTL_A LCTL(KC_A)
#define CTL_C LCTL(KC_C)
#define CTL_V LCTL(KC_V)
#define CTL_X LCTL(KC_X)
#define CTL_Z LCTL(KC_Z)
#define CTL_Y LCTL(KC_Y)
#define CA_TAB LCA(KC_TAB)
#define HYPER ALL_T(KC_NO)
#define TD_ADJ TD(ADJ)
#define TD_LBCB TD(LBCB)
#define TD_RBCB TD(RBCB)
#define TD_EQPL TD(EQPL)
#define TD_PLEQ TD(PLEQ)
#define TD_MNUN TD(MNUN)
#define TD_SLAS TD(SLAS)
#define TD_GVTL TD(GVTL)
#define TD_PPEQ TD(PPEQ)
#define TD_PMUN TD(PMUN)
#define TD_PSPA TD(PSPA)
#define NKROTG MAGIC_TOGGLE_NKRO
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
Colemak
(Defauit layer; keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
,-----------------------------------------------------. ,-----------------------------------------------------.
| Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| Esc/Ctl| A | R | S | T | D | | H | N | E | I | O | ' |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|SC Shift| Z | X | C | V | B | | K | M | , | . | / |SC Shift|
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------'
| Ins | ` | [ | ] | App/Alt| Spc/FN | | Bsp/Fn2| RGUI | Left | Down | Up | Right |
`--------------------------------------------+--------+--------. ,--------+--------+--------------------------------------------'
| Ent/NS | Bspc | | Enter | Del/NS2|
`-----------------' `-----------------'
*/
[_COLEMAK] = LAYOUT(
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
CTLESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
KC_INS, KC_GRV, KC_LBRC, KC_RBRC, ALTAPP, SPCFN, BSPCFN, KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
ENTNS, KC_BSPC, KC_ENT, DELNS
),
/*
QWERTY
(Keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
,-----------------------------------------------------. ,-----------------------------------------------------.
| Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| Esc/Ctl| A | S | D | F | G | | H | J | K | L | ; | ' |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|SC Shift| Z | X | C | V | B | | N | M | , | . | / |SC Shift|
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------'
| Ins | ` | [ | ] | App/Alt| Spc/FN | | Bsp/Fn2| RGUI | Left | Down | Up | Right |
`--------------------------------------------+--------+--------. ,--------+--------+--------------------------------------------'
| Ent/NS | Bspc | | Enter | Del/NS2|
`-----------------' `-----------------'
*/
[_QWERTY] = LAYOUT(
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
CTLESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
KC_INS, KC_GRV, KC_LBRC, KC_RBRC, ALTAPP, SPCFN, BSPCFN, KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
ENTNS, KC_BSPC, KC_ENT, DELNS
),
/*
Number/symbol layer
(Multiple characters: single-tap for first, double-tap for second)
,-----------------------------------------------------. ,-----------------------------------------------------.
| | 6 | 7 | 8 | 9 | 0 | | ^ | & | * | ( | ) | |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| | 1 | 2 | 3 | 4 | 5 | | ! | @ | # | $ | % | |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| | | . | / * | - _ | + = | | ` ~ | [ { | ] } | | | |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| ( | ) | [ { | ] } | | | | | | | | | |
`--------------------------------------------+--------+--------. ,--------+--------+--------------------------------------------'
| | | | | |
`-----------------' `-----------------'
*/
[_NUMBERS] = LAYOUT(
_______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______,
_______, _______, KC_DOT, TD_SLAS, TD_MNUN, TD_PLEQ, TD_GVTL, TD_LBCB, TD_RBCB, _______, _______, _______,
KC_LPRN, KC_RPRN, TD_LBCB, TD_RBCB, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______
),
/*
Number/Function Key layer
(Multiple characters: single-tap for first, double-tap for second)
,-----------------------------------------------------. ,-----------------------------------------------------.
| | 6 | 7 | 8 | 9 | 0 | | F7 | F8 | F9 | F10 | F11 | F12 |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| | 1 | 2 | 3 | 4 | 5 | | F1 | F2 | F3 | F4 | F5 | F6 |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| | | . | / * | - _ | + = | | ` ~ | [ { | ] } | | | |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| ( | ) | [ { | ] } | | | | | | | | | |
`--------------------------------------------+--------+--------. ,--------+--------+--------------------------------------------'
| | | | | |
`-----------------' `-----------------'
*/
[_NUMBERS2] = LAYOUT(
_______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
_______, _______, KC_DOT, TD_SLAS, TD_MNUN, TD_PLEQ, TD_GVTL, TD_LBCB, TD_RBCB, _______, _______, _______,
KC_LPRN, KC_RPRN, TD_LBCB, TD_RBCB, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______
),
/*
Function layer
,-----------------------------------------------------. ,-----------------------------------------------------.
| | | | Up | | | | | | Up | Ctrl+Y | | |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| | Ctrl+A | Left | Down | Right | C+A+Tab| | PgUp | Right | Down | Left | Home | |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| | Ctrl+Z | Ctrl+X | Ctrl+C | Ctrl+V | Bspc | | PgDn | Mute | Vol- | Vol+ | End | |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| | | | | | | | | | Prev | Play | Next | Stop |
`--------------------------------------------+--------+--------. ,--------+--------+--------------------------------------------'
| | | | | |
`-----------------' `-----------------'
*/
[_FUNCTION] = LAYOUT(
_______, _______, _______, KC_UP, _______, _______, _______, _______, KC_UP, CTL_Y, _______, _______,
_______, CTL_A, KC_LEFT, KC_DOWN, KC_RGHT, CA_TAB, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
_______, CTL_Z, CTL_X, CTL_C, CTL_V, KC_BSPC, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP,
_______, _______, _______, _______
),
[_FUNCTION2] = LAYOUT(
_______, _______, _______, KC_UP, _______, _______, _______, _______, KC_UP, CTL_Y, _______, _______,
_______, CTL_A, KC_LEFT, KC_DOWN, KC_RGHT, CA_TAB, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
_______, CTL_Z, CTL_X, CTL_C, CTL_V, KC_BSPC, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP,
_______, _______, _______, _______
),
/*
Numpad layer
(Left side duplicates layout from the Numbers layer, just with numpad output; right side layout close to PC numpad layout)
,-----------------------------------------------------. ,-----------------------------------------------------.
| | KP 6 | KP 7 | KP 8 | KP 9 | KP 0 | | NumLk | KP 7 | KP 8 | KP 9 | KP / | |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| | KP 1 | KP 2 | KP 3 | KP 4 | KP 5 | | Tab | KP 4 | KP 5 | KP 6 | KP * | |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| | NumLk | KP . | KP/ KP*| KP- _ | KP+ = | | | KP 1 | KP 2 | KP 3 | KP - | |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| ( | ) | [ { | ] } | | | | | KP 0 | = | KP . | KP + | |
`--------------------------------------------+--------+--------. ,--------+--------+--------------------------------------------'
| | | | KP Ent | |
`-----------------' `-----------------'
*/
[_NUMPAD] = LAYOUT(
_______, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_NLCK, KC_P7, KC_P8, KC_P9, KC_PSLS, _______,
_______, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_TAB, KC_P4, KC_P5, KC_P6, KC_PAST, _______,
_______, KC_NLCK, KC_PDOT, TD_PSPA, TD_PMUN, TD_PPEQ, _______, KC_P1, KC_P2, KC_P3, KC_PMNS, _______,
KC_LPRN, KC_RPRN, TD_LBCB, TD_RBCB, _______, _______, _______, KC_P0, KC_EQL, KC_PDOT, KC_PPLS, _______,
_______, _______, KC_PENT, _______
),
/*
Adjust layer
(Enter/Number + Delete/Number2 to access; Numpad is a toggle)
,-----------------------------------------------------. ,-----------------------------------------------------.
| | Colemak| Qwerty | | | | | Numpad | | | | | RESET |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| | | | | | | | |NKRO Tog| | | | |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| | | | | | | | | | | | | |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| | | | | | | | | | | | | |
`--------------------------------------------+--------+--------. ,--------+--------+--------------------------------------------'
| | | | | |
`-----------------' `-----------------'
*/
[_ADJUST] = LAYOUT(
_______, COLEMAK, QWERTY, _______, _______, _______, NUMPAD, _______, _______, _______, _______, RESET,
_______, _______, _______, _______, _______, _______, _______, NKROTG, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______
),
[_ADJUST2] = LAYOUT(
_______, COLEMAK, QWERTY, _______, _______, _______, NUMPAD, _______, _______, _______, _______, RESET,
_______, _______, _______, _______, _______, _______, _______, NKROTG, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______
)
};
uint32_t layer_state_set_user(uint32_t state) {
return update_tri_layer_state(state, _NUMBERS, _NUMBERS2, _ADJUST);
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case COLEMAK:
if (record->event.pressed) {
default_layer_set(1UL << _COLEMAK);
layer_move (_COLEMAK);
}
return false;
break;
case QWERTY:
if (record->event.pressed) {
default_layer_set(1UL << _QWERTY);
layer_move (_QWERTY);
}
return false;
break;
}
return true;
}

View File

@@ -0,0 +1,19 @@
# 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 = yes # Console for debug(+400)
COMMAND_ENABLE = no # 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 = no # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = yes # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes # Enable Tap Dancing function

View File

@@ -9,7 +9,7 @@
"layout": [{"label":"Num Lock", "x":0, "y":0}, {"label":"/", "x":1, "y":0}, {"label":"*", "x":2, "y":0}, {"label":"-", "x":3, "y":0}, {"label":"7", "x":0, "y":1}, {"label":"8", "x":1, "y":1}, {"label":"9", "x":2, "y":1}, {"label":"4", "x":0, "y":2}, {"label":"5", "x":1, "y":2}, {"label":"6", "x":2, "y":2}, {"label":"+", "x":3, "y":1, "h":2}, {"label":"1", "x":0, "y":3}, {"label":"2", "x":1, "y":3}, {"label":"3", "x":2, "y":3}, {"label":"0", "x":0, "y":4, "w":2}, {"label":".", "x":2, "y":4}, {"label":"Enter", "x":3, "y":3, "h":2}]
},
"LAYOUT_ortho_5x4": {
"layout": [{"label":"Num Lock", "x":0, "y":0}, {"label":"/", "x":1, "y":0}, {"label":"*", "x":2, "y":0}, {"label":"-", "x":3, "y":0}, {"label":"7", "x":0, "y":1}, {"label":"8", "x":1, "y":1}, {"label":"9", "x":2, "y":1}, {"label":"+", "x":3, "y":1}, {"label":"4", "x":0, "y":2}, {"label":"5", "x":1, "y":2}, {"label":"6", "x":2, "y":2}, {"label":"+", "x":3, "y":2}, {"label":"1", "x":0, "y":3}, {"label":"2", "x":1, "y":3}, {"label":"3", "x":2, "y":3}, {"label":"Enter", "x":3, "y":3}, {"label":"0", "x":0, "y":4, "w":2}, {"label":".", "x":2, "y":4}, {"label":"Enter", "x":3, "y":4}]
"layout": [{"label":"Num Lock", "x":0, "y":0}, {"label":"/", "x":1, "y":0}, {"label":"*", "x":2, "y":0}, {"label":"-", "x":3, "y":0}, {"label":"7", "x":0, "y":1}, {"label":"8", "x":1, "y":1}, {"label":"9", "x":2, "y":1}, {"label":"+", "x":3, "y":1}, {"label":"4", "x":0, "y":2}, {"label":"5", "x":1, "y":2}, {"label":"6", "x":2, "y":2}, {"label":"+", "x":3, "y":2}, {"label":"1", "x":0, "y":3}, {"label":"2", "x":1, "y":3}, {"label":"3", "x":2, "y":3}, {"label":"Enter", "x":3, "y":3}, {"label":"0", "x":0, "y":4}, {"label":"00", "x":1, "y":4}, {"label":".", "x":2, "y":4}, {"label":"Enter", "x":3, "y":4}]
}
}

View File

@@ -0,0 +1,18 @@
{
"keyboard_name": "meishi2",
"url": "",
"maintainer": "biacco42",
"width": 4,
"height": 1,
"layouts": {
"LAYOUT": {
"key_count": 4,
"layout": [
{ "x": 0, "y": 0 },
{ "x": 1, "y": 0 },
{ "x": 2, "y": 0 },
{ "x": 3, "y": 0 }
]
}
}
}

View File

@@ -256,7 +256,7 @@ uint16_t muse_counter = 0;
uint8_t muse_offset = 70;
uint16_t muse_tempo = 50;
void encoder_update(bool clockwise) {
void encoder_update_user(uint8_t index, bool clockwise) {
if (muse_mode) {
if (IS_LAYER_ON(_RAISE)) {
if (clockwise) {

View File

@@ -13,7 +13,7 @@ const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
__attribute__ ((weak))
void matrix_init_kb(void) {
// Turn status LED on
#ifdef __AVR__
#if defined(__AVR__) && defined(DDRE)
DDRE |= (1<<6);
PORTE |= (1<<6);
#endif
@@ -26,4 +26,4 @@ const uint8_t music_map[MATRIX_ROWS][MATRIX_COLS] = LAYOUT_planck_grid(
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
);
);

View File

@@ -77,6 +77,7 @@ void matrix_init(void) {
__attribute__ ((weak))
void dip_update(uint8_t index, bool active) { }
bool last_dip_switch[4] = {0};
uint8_t matrix_scan(void) {

View File

@@ -0,0 +1,3 @@
# Planck Through Hole Kit
Fuses I used are `-U lfuse:w:0xcf:m -U hfuse:w:0x90:m`, and I hit the ESC to bootup normally (just a work-around right now).

View File

@@ -0,0 +1,124 @@
/* Name: bootloaderconfig.h
* Project: AVR bootloader HID
* Author: Christian Starkjohann
* Creation Date: 2007-03-19
* Tabsize: 4
* Copyright: (c) 2007 by OBJECTIVE DEVELOPMENT Software GmbH
* License: GNU GPL v2 (see License.txt)
* This Revision: $Id$
*/
#ifndef __bootloaderconfig_h_included__
#define __bootloaderconfig_h_included__
/*
General Description:
This file (together with some settings in Makefile) configures the boot loader
according to the hardware.
This file contains (besides the hardware configuration normally found in
usbconfig.h) two functions or macros: bootLoaderInit() and
bootLoaderCondition(). Whether you implement them as macros or as static
inline functions is up to you, decide based on code size and convenience.
bootLoaderInit() is called as one of the first actions after reset. It should
be a minimum initialization of the hardware so that the boot loader condition
can be read. This will usually consist of activating a pull-up resistor for an
external jumper which selects boot loader mode. You may call leaveBootloader()
from this function if you know that the main code should run.
bootLoaderCondition() is called immediately after initialization and in each
main loop iteration. If it returns TRUE, the boot loader will be active. If it
returns FALSE, the boot loader jumps to address 0 (the loaded application)
immediately.
For compatibility with Thomas Fischl's avrusbboot, we also support the macro
names BOOTLOADER_INIT and BOOTLOADER_CONDITION for this functionality. If
these macros are defined, the boot loader usees them.
*/
/* ---------------------------- Hardware Config ---------------------------- */
#define USB_CFG_IOPORTNAME D
/* This is the port where the USB bus is connected. When you configure it to
* "B", the registers PORTB, PINB and DDRB will be used.
*/
#define USB_CFG_DMINUS_BIT 3
/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
* This may be any bit in the port.
*/
#define USB_CFG_DPLUS_BIT 2
/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
* This may be any bit in the port. Please note that D+ must also be connected
* to interrupt pin INT0! [You can also use other interrupts, see section
* "Optional MCU Description" below, or you can connect D- to the interrupt, as
* it is required if you use the USB_COUNT_SOF feature. If you use D- for the
* interrupt, the USB interrupt will also be triggered at Start-Of-Frame
* markers every millisecond.]
*/
#define USB_CFG_CLOCK_KHZ (F_CPU/1000)
/* Clock rate of the AVR in MHz. Legal values are 12000, 12800, 15000, 16000,
* 16500 and 20000. The 12.8 MHz and 16.5 MHz versions of the code require no
* crystal, they tolerate +/- 1% deviation from the nominal frequency. All
* other rates require a precision of 2000 ppm and thus a crystal!
* Default if not specified: 12 MHz
*/
/* ----------------------- Optional Hardware Config ------------------------ */
/* #define USB_CFG_PULLUP_IOPORTNAME D */
/* If you connect the 1.5k pullup resistor from D- to a port pin instead of
* V+, you can connect and disconnect the device from firmware by calling
* the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
* This constant defines the port on which the pullup resistor is connected.
*/
/* #define USB_CFG_PULLUP_BIT 4 */
/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
* above) where the 1.5k pullup resistor is connected. See description
* above for details.
*/
/* --------------------------- Functional Range ---------------------------- */
#define BOOTLOADER_CAN_EXIT 1
/* If this macro is defined to 1, the boot loader command line utility can
* initiate a reboot after uploading the FLASH when the "-r" command line
* option is given. If you define it to 0 or leave it undefined, the "-r"
* option won't work and you save a couple of bytes in the boot loader. This
* may be of advantage if you compile with gcc 4 instead of gcc 3 because it
* generates slightly larger code.
* If you need to save even more memory, consider using your own vector table.
* Since only the reset vector and INT0 (the first two vectors) are used,
* this saves quite a bit of flash. See Alexander Neumann's boot loader for
* an example: http://git.lochraster.org:2080/?p=fd0/usbload;a=tree
*/
/* ------------------------------------------------------------------------- */
/* Example configuration: Port D bit 3 is connected to a jumper which ties
* this pin to GND if the boot loader is requested. Initialization allows
* several clock cycles for the input voltage to stabilize before
* bootLoaderCondition() samples the value.
* We use a function for bootLoaderInit() for convenience and a macro for
* bootLoaderCondition() for efficiency.
*/
#ifndef __ASSEMBLER__ /* assembler cannot parse function definitions */
#include <util/delay.h>
static inline void bootLoaderInit(void)
{
DDRA |= (1 << 6);
PORTA &= ~(1 << 6); /* activate pull-up for key */
DDRD &= ~(1 << 7);
PORTD |= (1 << 7);
_delay_us(10); /* wait for levels to stabilize */
}
#define bootLoaderCondition() ((PIND & (1 << 7)) != 0) /* True if jumper is set */
#endif
/* ------------------------------------------------------------------------- */
#endif /* __bootloader_h_included__ */

View File

@@ -0,0 +1,250 @@
/* Name: main.c
* Project: AVR bootloader HID
* Author: Christian Starkjohann
* Creation Date: 2007-03-19
* Tabsize: 4
* Copyright: (c) 2007 by OBJECTIVE DEVELOPMENT Software GmbH
* License: GNU GPL v2 (see License.txt)
* This Revision: $Id$
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/wdt.h>
#include <avr/boot.h>
#include <string.h>
#include <util/delay.h>
static void leaveBootloader() __attribute__((__noreturn__));
#include "bootloaderconfig.h"
#include "usbdrv.c"
/* ------------------------------------------------------------------------ */
#ifndef ulong
# define ulong unsigned long
#endif
#ifndef uint
# define uint unsigned int
#endif
#if (FLASHEND) > 0xffff /* we need long addressing */
# define addr_t ulong
#else
# define addr_t uint
#endif
static addr_t currentAddress; /* in bytes */
static uchar offset; /* data already processed in current transfer */
#if BOOTLOADER_CAN_EXIT
static uchar exitMainloop;
#endif
const PROGMEM char usbHidReportDescriptor[33] = {
0x06, 0x00, 0xff, // USAGE_PAGE (Generic Desktop)
0x09, 0x01, // USAGE (Vendor Usage 1)
0xa1, 0x01, // COLLECTION (Application)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x85, 0x01, // REPORT_ID (1)
0x95, 0x06, // REPORT_COUNT (6)
0x09, 0x00, // USAGE (Undefined)
0xb2, 0x02, 0x01, // FEATURE (Data,Var,Abs,Buf)
0x85, 0x02, // REPORT_ID (2)
0x95, 0x83, // REPORT_COUNT (131)
0x09, 0x00, // USAGE (Undefined)
0xb2, 0x02, 0x01, // FEATURE (Data,Var,Abs,Buf)
0xc0 // END_COLLECTION
};
/* allow compatibility with avrusbboot's bootloaderconfig.h: */
#ifdef BOOTLOADER_INIT
# define bootLoaderInit() BOOTLOADER_INIT
#endif
#ifdef BOOTLOADER_CONDITION
# define bootLoaderCondition() BOOTLOADER_CONDITION
#endif
/* compatibility with ATMega88 and other new devices: */
#ifndef TCCR0
#define TCCR0 TCCR0B
#endif
#ifndef GICR
#define GICR MCUCR
#endif
static void (*nullVector)(void) __attribute__((__noreturn__));
static void leaveBootloader()
{
DBG1(0x01, 0, 0);
cli();
boot_rww_enable();
USB_INTR_ENABLE = 0;
USB_INTR_CFG = 0; /* also reset config bits */
#if F_CPU == 12800000
TCCR0 = 0; /* default value */
#endif
GICR = (1 << IVCE); /* enable change of interrupt vectors */
GICR = (0 << IVSEL); /* move interrupts to application flash section */
/* We must go through a global function pointer variable instead of writing
* ((void (*)(void))0)();
* because the compiler optimizes a constant 0 to "rcall 0" which is not
* handled correctly by the assembler.
*/
nullVector();
}
uchar usbFunctionSetup(uchar data[8])
{
usbRequest_t *rq = (void *)data;
static uchar replyBuffer[7] = {
1, /* report ID */
SPM_PAGESIZE & 0xff,
SPM_PAGESIZE >> 8,
((long)FLASHEND + 1) & 0xff,
(((long)FLASHEND + 1) >> 8) & 0xff,
(((long)FLASHEND + 1) >> 16) & 0xff,
(((long)FLASHEND + 1) >> 24) & 0xff
};
if(rq->bRequest == USBRQ_HID_SET_REPORT){
if(rq->wValue.bytes[0] == 2){
offset = 0;
return USB_NO_MSG;
}
#if BOOTLOADER_CAN_EXIT
else{
exitMainloop = 1;
}
#endif
}else if(rq->bRequest == USBRQ_HID_GET_REPORT){
usbMsgPtr = (usbMsgPtr_t)replyBuffer;
return 7;
}
return 0;
}
uchar usbFunctionWrite(uchar *data, uchar len)
{
union {
addr_t l;
uint s[sizeof(addr_t)/2];
uchar c[sizeof(addr_t)];
} address;
uchar isLast;
address.l = currentAddress;
if(offset == 0){
DBG1(0x30, data, 3);
address.c[0] = data[1];
address.c[1] = data[2];
#if (FLASHEND) > 0xffff /* we need long addressing */
address.c[2] = data[3];
address.c[3] = 0;
#endif
data += 4;
len -= 4;
}
DBG1(0x31, (void *)&currentAddress, 4);
offset += len;
isLast = offset & 0x80; /* != 0 if last block received */
do{
addr_t prevAddr;
#if SPM_PAGESIZE > 256
uint pageAddr;
#else
uchar pageAddr;
#endif
DBG1(0x32, 0, 0);
pageAddr = address.s[0] & (SPM_PAGESIZE - 1);
if(pageAddr == 0){ /* if page start: erase */
DBG1(0x33, 0, 0);
#ifndef TEST_MODE
cli();
boot_page_erase(address.l); /* erase page */
sei();
boot_spm_busy_wait(); /* wait until page is erased */
#endif
}
cli();
boot_page_fill(address.l, *(short *)data);
sei();
prevAddr = address.l;
address.l += 2;
data += 2;
/* write page when we cross page boundary */
pageAddr = address.s[0] & (SPM_PAGESIZE - 1);
if(pageAddr == 0){
DBG1(0x34, 0, 0);
#ifndef TEST_MODE
cli();
boot_page_write(prevAddr);
sei();
boot_spm_busy_wait();
#endif
}
len -= 2;
}while(len);
currentAddress = address.l;
DBG1(0x35, (void *)&currentAddress, 4);
return isLast;
}
static void initForUsbConnectivity(void)
{
uchar i = 0;
#if F_CPU == 12800000
TCCR0 = 3; /* 1/64 prescaler */
#endif
usbInit();
/* enforce USB re-enumerate: */
usbDeviceDisconnect(); /* do this while interrupts are disabled */
do{ /* fake USB disconnect for > 250 ms */
wdt_reset();
_delay_ms(1);
}while(--i);
usbDeviceConnect();
sei();
}
int __attribute__((noreturn)) main(void)
{
/* initialize hardware */
bootLoaderInit();
odDebugInit();
DBG1(0x00, 0, 0);
/* jump to application if jumper is set */
if(bootLoaderCondition()){
uchar i = 0, j = 0;
#ifndef TEST_MODE
GICR = (1 << IVCE); /* enable change of interrupt vectors */
GICR = (1 << IVSEL); /* move interrupts to boot flash section */
#endif
initForUsbConnectivity();
do{ /* main event loop */
wdt_reset();
usbPoll();
#if BOOTLOADER_CAN_EXIT
if(exitMainloop){
#if F_CPU == 12800000
break; /* memory is tight at 12.8 MHz, save exit delay below */
#endif
if(--i == 0){
if(--j == 0)
break;
}
}
#endif
}while(bootLoaderCondition());
}
leaveBootloader();
}

View File

@@ -0,0 +1,275 @@
/* Name: usbconfig.h
* Project: AVR USB driver
* Author: Christian Starkjohann
* Creation Date: 2007-03-13
* Tabsize: 4
* Copyright: (c) 2007 by OBJECTIVE DEVELOPMENT Software GmbH
* License: GNU GPL v2 (see License.txt)
* This Revision: $Id$
*/
#ifndef __usbconfig_h_included__
#define __usbconfig_h_included__
/*
General Description:
This file contains the configuration options for the USB driver.
Please note that the usbdrv contains a usbconfig-prototype.h file now. We
recommend that you use that file as a template because it will always list
the newest features and options.
*/
/* Fetch the hardware configuration from bootloaderconfig.h so that we have a
* single file where hardware settings are stored.
* Do not edit the functional settings below.
*/
#include "bootloaderconfig.h"
#define USB_PUBLIC static
/* Use the define above if you #include usbdrv.c instead of linking against it.
* This technique saves a couple of bytes in flash memory.
*/
/* --------------------------- Functional Range ---------------------------- */
#define USB_CFG_HAVE_INTRIN_ENDPOINT 1
/* Define this to 1 if you want to compile a version with two endpoints: The
* default control endpoint 0 and an interrupt-in endpoint 1.
*/
#define USB_CFG_HAVE_INTRIN_ENDPOINT3 0
/* Define this to 1 if you want to compile a version with three endpoints: The
* default control endpoint 0, an interrupt-in endpoint 1 and an interrupt-in
* endpoint 3. You must also enable endpoint 1 above.
*/
#define USB_CFG_SUPPRESS_INTR_CODE 1
/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
* want to send any data over them. If this macro is defined to 1, functions
* usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if
* you need the interrupt-in endpoints in order to comply to an interface
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
#define USB_CFG_IMPLEMENT_HALT 0
/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature
* for endpoint 1 (interrupt endpoint). Although you may not need this feature,
* it is required by the standard. We have made it a config option because it
* bloats the code considerably.
*/
#define USB_CFG_INTR_POLL_INTERVAL 200
/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
* interval. The value is in milliseconds and must not be less than 10 ms for
* low speed devices.
*/
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
#define USB_CFG_MAX_BUS_POWER 100
/* Set this variable to the maximum USB bus power consumption of your device.
* The value is in milliamperes. [It will be divided by two since USB
* communicates power requirements in units of 2 mA.]
*/
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
* bytes.
*/
#define USB_CFG_IMPLEMENT_FN_READ 0
/* Set this to 1 if you need to send control replies which are generated
* "on the fly" when usbFunctionRead() is called. If you only want to send
* data from a static buffer, set it to 0 and return the data from
* usbFunctionSetup(). This saves a couple of bytes.
*/
#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0
/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoint 1.
* You must implement the function usbFunctionWriteOut() which receives all
* interrupt/bulk data sent to endpoint 1.
*/
#define USB_CFG_HAVE_FLOWCONTROL 0
/* Define this to 1 if you want flowcontrol over USB data. See the definition
* of the macros usbDisableAllRequests() and usbEnableAllRequests() in
* usbdrv.h.
*/
#define TIMER0_PRESCALING 64 /* must match the configuration for TIMER0 in main */
#define TOLERATED_DEVIATION_PPT 5 /* max clock deviation before we tune in 1/10 % */
/* derived constants: */
#define EXPECTED_TIMER0_INCREMENT ((F_CPU / (1000 * TIMER0_PRESCALING)) & 0xff)
#define TOLERATED_DEVIATION (TOLERATED_DEVIATION_PPT * F_CPU / (1000000 * TIMER0_PRESCALING))
#ifdef __ASSEMBLER__
macro tuneOsccal
push YH ;[0]
clr YH ;[2]
in YL, TCNT0 ;[3]
out TCNT0, YH ;[4]
subi YL, EXPECTED_TIMER0_INCREMENT ;[5]
#if OSCCAL > 0x3f
lds YH, OSCCAL ;[6]
#else
in YH, OSCCAL ;[6]
#endif
cpi YL, TOLERATED_DEVIATION + 1 ;[7]
brmi notTooHigh ;[8]
subi YH, 1 ;[9] clock rate was too high
rjmp osctuneDone ;[10]
notTooHigh:
cpi YL, -TOLERATED_DEVIATION ;[10]
brpl osctuneDone ;[11] not too low
inc YH ;[12] clock rate was too low
osctuneDone:
#if OSCCAL > 0x3f
sts OSCCAL, YH ;[12-13] store tuned value
#else
out OSCCAL, YH ;[12-13] store tuned value
#endif
tuningOverflow:
pop YH ;[14]
endm ;[16] max number of cycles
#endif
#if F_CPU == 12800000
# define USB_SOF_HOOK tuneOsccal
#endif
/* This macro (if defined) is executed in the assembler module when a
* Start Of Frame condition is detected. It is recommended to define it to
* the name of an assembler macro which is defined here as well so that more
* than one assembler instruction can be used. The macro may use the register
* YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
* immediately after an SOF pulse may be lost and must be retried by the host.
* What can you do with this hook? Since the SOF signal occurs exactly every
* 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
* designs running on the internal RC oscillator.
* Please note that Start Of Frame detection works only if D- is wired to the
* interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
*/
/* -------------------------- Device Description --------------------------- */
#define USB_CFG_VENDOR_ID 0xc0, 0x16
/* USB vendor ID for the device, low byte first. If you have registered your
* own Vendor ID, define it here. Otherwise you use obdev's free shared
* VID/PID pair. Be sure to read USBID-License.txt for rules!
*/
#define USB_CFG_DEVICE_ID 0xdf, 0x05
/* This is the ID of the product, low byte first. It is interpreted in the
* scope of the vendor ID. If you have registered your own VID with usb.org
* or if you have licensed a PID from somebody else, define it here. Otherwise
* you use obdev's free shared VID/PID pair. Be sure to read the rules in
* USBID-License.txt!
*/
#define USB_CFG_DEVICE_VERSION 0x00, 0x01
/* Version number of the device: Minor number first, then major number.
*/
#define USB_CFG_VENDOR_NAME 'o', 'b', 'd', 'e', 'v', '.', 'a', 't'
#define USB_CFG_VENDOR_NAME_LEN 8
/* These two values define the vendor name returned by the USB device. The name
* must be given as a list of characters under single quotes. The characters
* are interpreted as Unicode (UTF-16) entities.
* If you don't want a vendor name string, undefine these macros.
* ALWAYS define a vendor name containing your Internet domain name if you use
* obdev's free shared VID/PID pair. See the file USBID-License.txt for
* details.
*/
#define USB_CFG_DEVICE_NAME 'H', 'I', 'D', 'B', 'o', 'o', 't'
#define USB_CFG_DEVICE_NAME_LEN 7
/* Same as above for the device name. If you don't want a device name, undefine
* the macros. See the file USBID-License.txt before you assign a name if you
* use a shared VID/PID.
*/
/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */
/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */
/* Same as above for the serial number. If you don't want a serial number,
* undefine the macros.
* It may be useful to provide the serial number through other means than at
* compile time. See the section about descriptor properties below for how
* to fine tune control over USB descriptors such as the string descriptor
* for the serial number.
*/
#define USB_CFG_DEVICE_CLASS 0
#define USB_CFG_DEVICE_SUBCLASS 0
/* See USB specification if you want to conform to an existing device class.
*/
#define USB_CFG_INTERFACE_CLASS 3 /* HID */
#define USB_CFG_INTERFACE_SUBCLASS 0
#define USB_CFG_INTERFACE_PROTOCOL 0
/* See USB specification if you want to conform to an existing device class or
* protocol.
*/
#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 33 /* total length of report descriptor */
/* Define this to the length of the HID report descriptor, if you implement
* an HID device. Otherwise don't define it or define it to 0.
*/
/* ------------------- Fine Control over USB Descriptors ------------------- */
/* If you don't want to use the driver's default USB descriptors, you can
* provide our own. These can be provided as (1) fixed length static data in
* flash memory, (2) fixed length static data in RAM or (3) dynamically at
* runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
* information about this function.
* Descriptor handling is configured through the descriptor's properties. If
* no properties are defined or if they are 0, the default descriptor is used.
* Possible properties are:
* + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
* at runtime via usbFunctionDescriptor().
* + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
* in static memory is in RAM, not in flash memory.
* + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
* the driver must know the descriptor's length. The descriptor itself is
* found at the address of a well known identifier (see below).
* List of static descriptor names (must be declared PROGMEM if in flash):
* char usbDescriptorDevice[];
* char usbDescriptorConfiguration[];
* char usbDescriptorHidReport[];
* char usbDescriptorString0[];
* int usbDescriptorStringVendor[];
* int usbDescriptorStringDevice[];
* int usbDescriptorStringSerialNumber[];
* Other descriptors can't be provided statically, they must be provided
* dynamically at runtime.
*
* Descriptor properties are or-ed or added together, e.g.:
* #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
*
* The following descriptors are defined:
* USB_CFG_DESCR_PROPS_DEVICE
* USB_CFG_DESCR_PROPS_CONFIGURATION
* USB_CFG_DESCR_PROPS_STRINGS
* USB_CFG_DESCR_PROPS_STRING_0
* USB_CFG_DESCR_PROPS_STRING_VENDOR
* USB_CFG_DESCR_PROPS_STRING_PRODUCT
* USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
* USB_CFG_DESCR_PROPS_HID
* USB_CFG_DESCR_PROPS_HID_REPORT
* USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
*
*/
#define USB_CFG_DESCR_PROPS_DEVICE 0
#define USB_CFG_DESCR_PROPS_CONFIGURATION 0
#define USB_CFG_DESCR_PROPS_STRINGS 0
#define USB_CFG_DESCR_PROPS_STRING_0 0
#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0
#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0
#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0
#define USB_CFG_DESCR_PROPS_HID 0
#define USB_CFG_DESCR_PROPS_HID_REPORT 0
#define USB_CFG_DESCR_PROPS_UNKNOWN 0
#define usbMsgPtr_t unsigned short /* Use scalar type in order to save a couple of bytes */
/* ----------------------- Optional MCU Description ------------------------ */
/* The following configurations have working defaults in usbdrv.h. You
* usually don't need to set them explicitly. Only if you want to run
* the driver on a device which is not yet supported or with a compiler
* which is not fully supported (such as IAR C) or if you use a differnt
* interrupt than INT0, you may have to define some of these.
*/
/* #define USB_INTR_CFG MCUCR */
/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */
/* #define USB_INTR_CFG_CLR 0 */
/* #define USB_INTR_ENABLE GIMSK */
/* #define USB_INTR_ENABLE_BIT INT0 */
/* #define USB_INTR_PENDING GIFR */
/* #define USB_INTR_PENDING_BIT INTF0 */
#endif /* __usbconfig_h_included__ */

Some files were not shown because too many files have changed in this diff Show More